Spec-Zone.ru › Angular

CanMatch

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

CanMatch

API

interface CanMatch {
  canMatch(route: Route, segments: UrlSegment[], currentSnapshot: PartialMatchRouteSnapshot): MaybeAsync<GuardResult>;
}

canMatch

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

Описание

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

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

class UserToken {}
class Permissions {
  canAccess(user: UserToken, route: Route, segments: UrlSegment[]): boolean {
    return true;
  }
}

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

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

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

@NgModule({
  imports: [
    RouterModule.forRoot([
      {
        path: 'team/:id',
        component: TeamComponent,
        loadChildren: () => import('./team').then(mod => mod.TeamModule),
        canMatch: [CanMatchTeamSection]
      },
      {
        path: '**',
        component: NotFoundComponent
      }
    ])
  ],
  providers: [CanMatchTeamSection, UserToken, Permissions]
})
class AppModule {}

Если бы CanMatchTeamSection вернул false, маршрутизатор продолжил бы навигацию по URL team/:id, но загрузил бы NotFoundComponent, поскольку Route для 'team/:id' нельзя было бы использовать для сопоставления URL, а вместо него сработал бы универсальный Route **.

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/CanMatch

Spec-Zone.ru

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