目前,在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
}, {
是否有一种干净的方法可以做到这一点,或者是破坏路由组织的唯一方法,并且手动将路由器防护应用于每个子路由,除了帮助页面?
答案 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
}