我有一个接受queryParams的路由器,它可以包含或不包含针对语言的queryParam,例如:?lang = de
当我使用路由器导航时,它起作用:
this.router.navigate(['/routeToNavigate'], { queryParams: queryParams })
我的问题是在路由文件中:
const APP_ROUTES: Routes = [
{
path: '',
canActivate: [ValidUserGuard],
runGuardsAndResolvers: 'always',
children: [
{
path: '',
redirectTo: '/main',
pathMatch: 'full'
}
]
},
{path: '**', redirectTo: ''}
];
我的问题是在这个redirectTo中,如果它们存在,我在这里丢失了queryParams。
例如,无效的网址是:
http://mypage.com?lang=dehttp://mypage.com/invalidRoute?lang=de
如何在此“ redirectTo”中包含queryParms?
我解决了,如果有人感兴趣:
{
path: '',
children: [],
canActivate: [RedirectorGuard],
pathMatch: 'full'
},
export class RedirectorGuard implements CanActivate {
constructor(
private router: Router
) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
const queryParams = route.queryParams.lang ? {
lang: route.queryParams.lang
} : {};
return this.router.navigate(['/landing'], { queryParams: queryParams })
.then(() => true);
}
}