是否可以从父路径或根路由获取子路由@CanActivate
的值?
我有几条不同@CanActivate
条件的路线。它们在应用程序初始化后工作,但我的问题是初始加载。当我打开一个浏览器时,路径指向一条无法激活的路径:
@CanActivate(() => false)
组件未加载,这很好。在这种情况下我想重定向到root,但我找不到好的条件来检查。我尝试了几件事:
useAsDefault: true
- 无效this._router._currentInstruction
- 没有效果,null
和@CanActivate(() => false)
对子组件@CanActivate(() => false)
routerOnActivate()
- 没有效果,它永远不会在子组件上使用@CanActivate(() => false)
调用尝试使用Reflect
,但它接缝路由器不会引用实际组件,但会创建componentType
“副本”:
ngAfterViewInit() {
let url = this._router.lastNavigationAttempt;
this._router.recognize(url).then(resolvedInstruction => {
let component = resolvedInstruction.child.component.componentType;
let canActivate = Reflect.getMetadata("CanActivate", component.constructor);
console.log(canActivate); // => undefined
});
答案 0 :(得分:1)
我通过在前一个linkParams
为ComponentInstruction
时创建null
来解决此问题,然后指示路由器使用这些参数进行导航。
这是一个有点复杂的解决方案(使用@ ngrx / store,静态类方法,注入器...),但它是大型应用程序的一部分,我喜欢一次性写入而忘记它< / em>方法(:
然而,它易于使用:
@CanActivate((next, prev) => {
return _BaseRoute.canActivate(true, next, prev );
})
export class ChildRoute extends _BaseRoute {
constructor(public store: Store<any>) {
super();
}
}
其余代码位于this Gist。如果有人找到更好的解决方案,我很乐意接受答案。