可以从父路由或根路由获取子路由的@CanActivate 的值吗?
我有几条不同@CanActivate条件的路线。它们在应用程序初始化后工作,但我的问题是初始加载。当我使用指向无法激活的路由之一的路径打开浏览器时:
@CanActivate(() => false)组件没有加载,这很好。在这种情况下,我想重定向到根,但是我找不到好的条件来检查。我尝试过的东西很少:
useAsDefault: true -没有影响this._router._currentInstruction -没有效果,对于子组件的@CanActivate(() => false)和@CanActivate(() => false)都是null。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
});发布于 2016-02-22 19:25:52
我解决了这个问题,在以前的linkParams是null的情况下创建了null,然后指示路由器使用这些params导航。
这是一个有点复杂的解决方案(使用@ngrx/store、静态类方法、注入器.),但它是大型应用程序的一部分,我喜欢写一次和忘记-it方法(:
然而,它很容易使用:
@CanActivate((next, prev) => {
return _BaseRoute.canActivate(true, next, prev );
})
export class ChildRoute extends _BaseRoute {
constructor(public store: Store<any>) {
super();
}
}其余代码在这个要旨中。如果有人找到更好的解决办法,我很乐意接受这个答案。
https://stackoverflow.com/questions/35558346
复制相似问题