类似的东西告诉我发生了NavigationCancel
事件,但我想知道,是什么触发了该事件:
例如AppComponent(摘录):
constructor (
....
private router: Router
) {
router.events.subscribe(e => {
if (e instanceof NavigationCancel) {
// PLEASE TELL ME, WHO DID CALL ME ? <---
}
});
}
每当我刷新浏览器时,某种东西(后卫,msal等)都会删除该路由,而上次访问的路由都消失了。目前无法进行深层链接。
一种解决方法是:我必须将最后一条路由保存在LocalStorage中,并强制应用程序切换到该路由。也许如果我能找到触发器,也许我会找到另一个解决方案。
答案 0 :(得分:1)
创建一种在警卫失败时得到通知的服务可能对您有用。
如您所见here,您无法钩住路由器服务,因此警卫队需要一些样板代码。如果返回错误,请致电您的服务,该服务将存储保护错误。
别忘了删除导航启动事件中的错误。
您可以向Angular团队发出功能请求以创建此类挂钩,以获取防护错误。
答案 1 :(得分:-1)
除了使用boolean
之外,您还可以使用额外的参数从防护中返回UrlTree
。因此,如果您要重定向到/home
,则可以这样做:
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (!this.authService.isLoggedIn) {
return this.router.createUrlTree(['/home', { message: 'You shall not pass' }]);
} else {
return true;
}
}
然后,您可以使用message
在目标位置阅读此ActivatedRoute#params
。
摘自here的示例。
答案 2 :(得分:-2)
NavigationCancel
在CanLoad
或CanActivate
防护阻止子路由加载时发生。如果要调试路由器事件,请将enableTracing: true
添加到RouterModule
configuration中。另外,NavigationCancel
有一个reason
property,其中可能包含有用的信息。