CanActivateChild
Интерфейс, который может реализовать класс, чтобы выступать в роли защитника и определять, можно ли активировать дочерний маршрут. Если все защитники возвращают true, навигация продолжается. Если хотя бы один защитник возвращает false, навигация отменяется. Если какой-либо защитник возвращает UrlTree, текущая навигация отменяется и начинается новая навигация к UrlTree, возвращённому защитником.
API
interface CanActivateChild {
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): MaybeAsync<GuardResult>;
}
canActivateChild
MaybeAsync<GuardResult>MaybeAsync<GuardResult>
Описание
Интерфейс, который может реализовать класс, чтобы выступать в роли защитника и определять, можно ли активировать дочерний маршрут. Если все защитники возвращают true, навигация продолжается. Если хотя бы один защитник возвращает false, навигация отменяется. Если какой-либо защитник возвращает UrlTree, текущая навигация отменяется и начинается новая навигация к UrlTree, возвращённому защитником.
В следующем примере реализована функция CanActivateChild, которая проверяет, есть ли у текущего пользователя разрешение на активацию запрошенного дочернего маршрута.
class UserToken {}
class Permissions {
canActivate(user: UserToken, id: string): boolean {
return true;
}
}
@Injectable()
class CanActivateTeam implements CanActivateChild {
private readonly permissions = inject(Permissions);
private readonly currentUser = inject(UserToken);
canActivateChild(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): MaybeAsync<GuardResult> {
return this.permissions.canActivate(this.currentUser, route.params.id);
}
}
Здесь определённая функция-защитник передаётся как часть объекта Route в конфигурации маршрутизатора:
@NgModule({
imports: [
RouterModule.forRoot([
{
path: 'root',
canActivateChild: [CanActivateTeam],
children: [
{
path: 'team/:id',
component: TeamComponent
}
]
}
])
],
providers: [CanActivateTeam, UserToken, Permissions]
})
class AppModule {}
Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/router/CanActivateChild