【发布时间】:2017-03-02 23:31:23
【问题描述】:
关于 Route Guards 的 angular2 文档让我不清楚何时将 CanActivate 防护与 CanActivateChild 防护与无组件路由结合使用。
TL;DR:当我可以使用带有canActivate 的无组件路由来实现相同效果时,拥有canActivateChild 有什么意义?
长版:
我们可以在路由层次结构的每一层都有多个警卫。这 路由器首先检查 CanDeactivate 和 CanActivateChild 守卫, 从最深的子路径到顶部。然后它检查 CanActivate 从上到下保护最深的子路线。
我知道CanActivateChild 是自下而上检查的,CanActivate 是自上而下检查的。对我来说没有意义的是文档中给出的以下示例:
@NgModule({
imports: [
RouterModule.forChild([
{
path: 'admin',
component: AdminComponent,
canActivate: [AuthGuard],
children: [
{
path: '',
canActivateChild: [AuthGuard],
children: [
{ path: 'crises', component: ManageCrisesComponent },
{ path: 'heroes', component: ManageHeroesComponent },
{ path: '', component: AdminDashboardComponent }
]
}
]
}
])
],
exports: [
RouterModule
]
})
export class AdminRoutingModule {}
所以admin 路径有一个无组件路由:
查看AdminComponent下的子路由,我们有一个路由 带有路径和子属性,但它没有使用组件。我们 我们的配置没有出错,因为我们可以使用 无组件路由。
为什么这种情况下的代码在子组件和根组件(路径admin)中插入AuthGuard?从根本上守卫还不够吗?
我根据删除canActivateChild: [AuthGuard] 并在AdminDashboard 上添加注销按钮的示例创建了plunkr。果然,父路由的canActivate 仍然守卫,那么当我可以将无组件路由与canActivate 一起使用时,拥有canActivateChild 有什么意义呢?
【问题讨论】:
-
我想知道同样的事情,你有机会在 github 上发布这个吗?
-
这是同一个问题,也许对你有帮助:stackoverflow.com/questions/42632154/…
-
我认为您仍然可以在根
admin路径上拥有一个canActivateChild,这样您就不需要无组件路由。我相信这里的无组件方法在指南中被用来证明我们甚至可以更进一步,对相关的子路由进行分组,以便对它们应用更专业的防护。