我有一个需要配置的路由保护。在某些路线上,我们想检查我们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),
)
}
);