将路由器防护应用于除一个外的所有孩子

时间:2018-02-09 22:25:13

标签: angular angular-router angular-router-guards

目前,在Angular中,您可以通过将路由器防护应用于其中一个父级来限制对所有子路由的访问:

export const routes: Routes = [
  {
    path: 'my-account',
    canActivate: [IsUserLoggedIn],
    children: [{
      path: 'settings',
      component: SettingsComponent
    }, {
      path: 'edit-profile',
      component; EditProfileComponent
    }]
  }
];

这有助于避免在每条路线中重复canActivate后卫。但是现在当我想在my-account下引入应该可公开访问的第三条路线时会发生什么?例如,可能在my-account/help处有一个可公开访问的帮助页面,每个人都应该可以访问,即使他们没有登录:

}, {
  path: 'help',
  component: HelpComponent,
  // Somehow make exception to canActivate guard above
}, {

是否有一种干净的方法可以做到这一点,或者是破坏路由组织的唯一方法,并且手动将路由器防护应用于每个子路由,除了帮助页面?

1 个答案:

答案 0 :(得分:1)

我能想到的唯一解决方案是:

canActivate(
        next: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): boolean {

       // In the next you have .url prop so you can check for it 
       if (next.url.indexOf('help') !== -1) { return true; }

       // Your current Guard logic
    }