如何使用路由器文件中的查询参数进行重定向

问题描述 投票:0回答:1

我有一个接受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?

angular angular-routing angular-router
1个回答
0
投票

我解决了,如果有人感兴趣:

  {
    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);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.