Spec-Zone.ru › Angular

CanLoad

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

Предупреждение об устаревании

Вместо этого используйте CanMatch

API

interface CanLoad {
  canLoad(route: Route, segments: UrlSegment[]): MaybeAsync<GuardResult>;
}

canLoad

MaybeAsync<GuardResult>
@paramrouteRoute
@paramsegmentsUrlSegment[]
@returnsMaybeAsync<GuardResult>

Описание

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

В следующем примере реализована функция CanLoad, которая определяет, есть ли у текущего пользователя разрешение на загрузку запрошенных дочерних маршрутов.

class UserToken {}
class Permissions {
  canLoadChildren(user: UserToken, id: string, segments: UrlSegment[]): boolean {
    return true;
  }
}

@Injectable()
class CanLoadTeamSection implements CanLoad {
  private readonly permissions = inject(Permissions);
  private readonly currentUser = inject(UserToken);

  canLoad(route: Route, segments: UrlSegment[]): Observable<boolean>|Promise<boolean>|boolean {
    return this.permissions.canLoadChildren(this.currentUser, route, segments);
  }
}

Здесь определённая функция защиты указывается в объекте Route в конфигурации маршрутизатора:

@NgModule({
  imports: [
    RouterModule.forRoot([
      {
        path: 'team/:id',
        component: TeamComponent,
        loadChildren: () => import('./team').then(mod => mod.TeamModule),
        canLoad: [CanLoadTeamSection]
      }
    ])
  ],
  providers: [CanLoadTeamSection, 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/CanLoad

Spec-Zone.ru

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