Angular 7:如何检测NavigationCancel的原因

问题描述 投票:0回答:3

这样的事告诉我发生了NavigationCancel事件,但我想知道,无论触发了什么:

例如AppComponent(摘录):

constructor (
  ....
  private router: Router
)  {
     router.events.subscribe(e => {
       if (e instanceof NavigationCancel) {
         // PLEASE TELL ME, WHO DID CALL ME ? <---
       }
     });
   }

如果我刷新浏览器,那么每次都会删除路由(警卫,邮件等等),最后访问的路由消失了。深层链接目前是不可能的。

解决方法是:我必须保存LocalStorage中的最后一个路由并强制应用程序切换到该路由。也许如果我能找到触发器,也许我会找到另一个解决方案。

angular navigation router guard msal
3个回答
1
投票

创建在防护失败时通知的服务可能对您有用。

正如你所看到的那样here你无法勾选到路由器服务,因此需要一些样板代码来保护。如果它返回false,则调用您的服务,该服务存储警卫错误。

不要忘记删除导航开始事件中的错误。

您可以为Angular团队发出功能请求以创建此类挂钩,以便能够获得警卫错误。


0
投票

而不是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
投票

NavigationCancel发生在CanLoadCanActivate防护装置阻止儿童路线装载时。如果要调试路由器事件,请将enableTracing: true添加到RouterModule configuration。此外,NavigationCancel有一个reason property可能有用的信息。

© www.soinside.com 2019 - 2024. All rights reserved.