CanActivate
Интерфейс, который класс может реализовать, чтобы стать защитой, определяющей, можно ли активировать маршрут. Если все защиты возвращают true, навигация продолжается. Если хотя бы одна защита возвращает false, навигация отменяется. Если хотя бы одна защита возвращает UrlTree, текущая навигация отменяется и начинается новая навигация к UrlTree, возвращённому защитой.
API
interface CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): MaybeAsync<GuardResult>;
}
canActivate
MaybeAsync<GuardResult>Описание
Интерфейс, который класс может реализовать, чтобы стать защитой, определяющей, можно ли активировать маршрут. Если все защиты возвращают true, навигация продолжается. Если хотя бы одна защита возвращает false, навигация отменяется. Если хотя бы одна защита возвращает UrlTree, текущая навигация отменяется и начинается новая навигация к UrlTree, возвращённому защитой.
В следующем примере реализована функция CanActivate, которая проверяет, есть ли у текущего пользователя разрешение на активацию запрошенного маршрута.
class UserToken {}
class Permissions {
canActivate(): boolean {
return true;
}
}
@Injectable()
class CanActivateTeam implements CanActivate {
private readonly permissions = inject(Permissions);
private readonly currentUser = inject(UserToken);
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): MaybeAsync<GuardResult> {
return this.permissions.canActivate(this.currentUser, route.params.id);
}
}
Здесь определённая функция защиты передаётся как часть объекта Route в конфигурации маршрутизатора:
@NgModule({
imports: [
RouterModule.forRoot([
{
path: 'team/:id',
component: TeamComponent,
canActivate: [CanActivateTeam]
}
])
],
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/CanActivate