CanActivate vs. CanActivateChild com rotas sem componente
A documentação angular2 sobreProtetores de rota me deixou incerto sobre quando é apropriado usar umCanActivate
guardas contra umCanActivateChild
guarda em combinação com rotas sem componentes.
TL; DR: qual é o sentido de tercanActivateChild
quando eu posso usar rotas sem componentes comcanActivate
para alcançar o mesmo efeito?
Versão longa:
Podemos ter vários guardas em todos os níveis de uma hierarquia de roteamento. O roteador verifica os guardas CanDeactivate e CanActivateChild primeiro, da rota filho mais profunda para o topo. Em seguida, ele verifica os protetores do CanActivate de cima para baixo até a rota filho mais profunda.
entendiCanActivateChild
é verificado de baixo para cima eCanActivate
está marcado de cima para baixo. O que não faz sentido para mim é o seguinte exemplo dado nos documentos:
@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 {}
Então oadmin
path possui uma rota sem componente:
Observando nossa rota filho no AdminComponent, temos uma rota com um caminho e uma propriedade filhos, mas ela não está usando um componente. Não cometemos um erro em nossa configuração, porque podemos usar uma rota sem componente.
Por que o código neste caso está inserindo oAuthGuard
no filho e no componente raiz (caminhoadmin
)? Não seria suficiente guardar na raiz?
Eu criei umplunkr com base na amostra que remove ocanActivateChild: [AuthGuard]
e adiciona um botão de logout noAdminDashboard
. Com certeza, ocanActivate
da rota pai ainda guarda, então qual é o sentido de tercanActivateChild
quando eu posso usar rotas sem componentes comcanActivate
?