Документация angular2 о Route Guard > оставила меня неясным, когда целесообразно использовать защитные устройства CanActivate
против a CanActivateChild
защита в сочетании с маршрутами без компонентов.
TL; DR: какая точка имеет CanActivateChild
, когда я могу использовать безразмерные маршруты с CanActivate
для достижения того же эффекта?
Длинная версия:
Мы можем иметь несколько охранников на каждом уровне иерархии маршрутизации. маршрутизатор сначала проверяет защиту 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, у нас есть маршрут с свойством path и child, но он не использует компонент. Мы не сделали ошибку в нашей конфигурации, потому что мы можем использовать без компонентов.
Почему код в этом случае вставляет AuthGuard
в дочерний элемент и в корневой компонент (путь admin
)? Не хватит ли охранять в корне?
Я создал plunkr на основе образца, который удаляет canActivateChild: [AuthGuard]
и добавляет кнопку выхода на AdminDashboard
. Разумеется, CanActivate
родительского маршрута все еще охраняется, так что точка с наличием CanActivateChild
, когда я могу использовать маршруты без компонентов с CanActivate
?