导航到router.events函数中的另一个路由导致浏览器挂起

时间:2017-04-09 22:18:51

标签: angular angular2-routing

我订阅了我的顶级导航栏组件中的路由器事件:

this.router.events.subscribe(event => {
    if (event instanceof RoutesRecognized && this.authService.isLoggedIn()) {

         // some other custom if-logic then do this:
         this.router.navigate(['404']);
    }
});

当我执行上面的代码时,我的浏览器冻结了,我必须在任务管理器中杀死chrome.exe ...

为什么在旧路线仍在导航时我无法导航到另一条新路线?

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您正处于重定向循环配对之下。 您正在调用事件块内的路由器导航方法,而您的条件中没有特定的URL。

目前,只要网址更新,您的代码就会执行,因此每次重定向后都会反复执行。

要解决这个问题,请尝试添加路由以及条件,这样就不会为每个网址执行

 this.router.events.subscribe(event => {
  let url = this.router.url;
  if (event instanceof RoutesRecognized && this.authService.isLoggedIn() && url !== "/404") {

     // some other custom if-logic then do this:
     this.router.navigate(['404']);
   }
  });

将url逻辑替换为您自己的逻辑,但是您必须限制您的代码在特定页面上执行,而不是在上面的示例中它不会在404路径上执行。