我正在寻找一种解决方案,通过传递参数/标志/在路由器导航中传递参数/标志等来忽略一次性保护。
目前的配置:
使用auth canActivate: [CanActivateGuard]
问题:
canActivate(): boolean {
let canActivate = false;
this.store$.pipe(select(selectSth), take(1)).subscribe(item => {
if (!!item) {
return canActivate = true;
}
this.router.navigate(['/main']);
return canActivate = false;
});
return canActivate;
}
}在解析器之前对
中存在参数,也无法导航到/main路径。
问题:
有什么解决方案可以在this.router.navigate中添加参数并一次避免保护?
发布于 2021-07-12 09:04:46
问题是,在角度上,所有守卫都应该在任何解析器之前执行,所以如果您有带守卫的子路径,除非所有守卫都成功,否则它们会阻塞父解析器。
这一逻辑意味着保护程序的数据应该已经存在(App )或由保护程序加载。
一个可能的解决方案是将数据加载逻辑移动到保护,如果保护成功,则相应的解析器将简单地从存储中选择数据。
如果您不打算一直在一起使用守护程序和解析器,那么您可以引入一个服务,如果需要的话,可以加载数据,并且在两个类中都依赖于服务:守护程序和解析器。
https://stackoverflow.com/questions/68324771
复制相似问题