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