CanMatch
Интерфейс, который класс может реализовать в качестве защитника, определяющего, можно ли сопоставить Route. Если все защитники возвращают true, навигация продолжается, и Router будет использовать Route при активации. Если какой-либо защитник возвращает false, сопоставление с Route пропускается, и вместо него обрабатываются другие конфигурации Route.
API
interface CanMatch {
canMatch(route: Route, segments: UrlSegment[], currentSnapshot: PartialMatchRouteSnapshot): MaybeAsync<GuardResult>;
}
canMatch
MaybeAsync<GuardResult>MaybeAsync<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