Spec-Zone.ru › Angular

CanActivate

Интерфейс, который класс может реализовать, чтобы стать защитой, определяющей, можно ли активировать маршрут. Если все защиты возвращают true, навигация продолжается. Если хотя бы одна защита возвращает false, навигация отменяется. Если хотя бы одна защита возвращает UrlTree, текущая навигация отменяется и начинается новая навигация к UrlTree, возвращённому защитой.

CanActivate

API

interface CanActivate {
  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): MaybeAsync<GuardResult>;
}

canActivate

MaybeAsync<GuardResult>
@paramrouteActivatedRouteSnapshot
@paramstateRouterStateSnapshot
@returnsMaybeAsync<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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API