【发布时间】:2023-03-27 05:59:01
【问题描述】:
是否可以在 canActivate 保护中访问已解析的路由数据(-Resolver)。目前我可以通过
访问组件中的解析数据ngOnInit() {
this.route.data
.subscribe((data: { example: Array<Object> }) => {
this.example = data.example;
console.log('example resolver', this.example);
});
}
我如何在 canActivate 守卫中管理它?这不起作用:
constructor(private route: ActivatedRoute) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot,
): boolean {
this.route.data
.subscribe((data: { example: Array<Object> }) => {
this.example = data.example;
console.log('example resolver', this.example);
});
}
【问题讨论】:
-
我希望
data仅在canActivate返回true后才可用 -
nope ... 手动设置路由
data.example通过使用this.route.data['example']使其在canActivate中可用... 问题似乎是canActivate在数据被解决之前运行resolver并且发布的订阅不起作用 -
您可以将保护逻辑移至解析中。但当然,这是一个不太优雅的解决方案。据我了解,所有解决方案都是可选的。您可以通过解析失败来阻止导航
-
我有同样的问题,我有 authGuard 从数据中获取允许的角色列表:部分(工作正常)但我试图解决当前分配的用户角色以检查 authGuard 与“允许" 角色 - 数据部分(允许的角色列表)工作正常,但是我无法访问“已解决”的角色 - 甚至似乎都没有调用 resolve!
标签: angular router guard resolver