У меня есть охранник маршрута, который необходимо настроить. На каком-то маршруте мы хотим проверить, готов ли наш user client
, на некоторых других мы хотим проверить, готов ли наш team client
и т. Д.
У меня есть мой охранник маршрута, который выглядит так
@Injectable({
providedIn: 'root'
})
export class ClientReadyGuard implements CanActivate, CanActivateChild {
constructor(
private clientName: string,
private router: Router ,
private apolloState: ApolloStateService,
) {
debugger;
}
canActivate(...) {
// do things with clientName
}
и от этого охранника я бы хотел иметь несколько охранников: один, который защищает с помощью clientName
«все пользователи», один с «пользователем», один с «командой» и так далее.
Иметь:
canActivate: [
AllUserClientReadyGuard,
UserClientReadyGuard,
TeamClientReadyGuard,
]
Для этого я безуспешно пытался с токеном инъекции; (NullInjectorError: No provider for InjectionToken router token!
).
export const ROUTER_TOKEN = new InjectionToken<Router>('router token');
export const APOLLO_STATE_TOKEN = new InjectionToken<ApolloStateService>('apollo state token');
export const UserClientReadyGuard = new InjectionToken<ClientReadyGuard>(
'user client ready guard',
{
providedIn: 'root', factory: () => new ClientReadyGuard(
USER_CLIENT,
inject(ROUTER_TOKEN),
inject(APOLLO_STATE_TOKEN),
)
}
);