有没有办法知道angular 2中是否没有发生路由事件?

有没有办法知道angular 2中是否没有发生路由事件?,angular,events,angular2-routing,Angular,Events,Angular2 Routing,在一段代码中,当路由器事件发生时,以及当路由器事件未发生时,我必须有条件地运行一些语句。 我尝试使用路由器订阅变量的closed属性。那没用。我想知道是否可以检测到是否没有路由器事件,因为如果没有路由器事件,要运行的代码是同步的,并且即使路由发生变化也会运行(因为这是异步的,几乎没有延迟) 您可以在路由器事件发生时设置一个标志,并在完整回调中检查是否已发生: boolwasevent=false; this.routerSubscription=this.\u router.events .fi

在一段代码中,当路由器事件发生时,以及当路由器事件未发生时,我必须有条件地运行一些语句。 我尝试使用路由器订阅变量的
closed
属性。那没用。我想知道是否可以检测到是否没有路由器事件,因为如果没有路由器事件,要运行的代码是同步的,并且即使路由发生变化也会运行(因为这是异步的,几乎没有延迟)


您可以在路由器事件发生时设置一个标志,并在完整回调中检查是否已发生:

boolwasevent=false;
this.routerSubscription=this.\u router.events
.filter(e=>NavigationEnd的事件实例)
.first()//只取一个
.订阅(
事件=>wasEvent=true,
(err)=>{},
()=>console.log(`Router events Occessed:${wasEvents}`)
);            
);

听起来很奇怪。“无路由器事件”是什么意思?应用程序从1h开始运行,但仍然没有路由器事件,或者更好的是5h?;-)我已经编辑了这个问题,因此,当我得到一个异常并进入catch块时,我需要知道,当异常发生时,路由器事件是否发生。由于我对回调的了解很少,我推断出的答案是:(现在不考虑过滤器)在subscribe
。subscribe((事件)=>{set flag here,code for when route changes},(noEvent)=>{如果事件没有发生,这将运行,我可以在这里检查标志}
。如果这是真的,它永远不会进入
(noEvent)部分
没有为完整的回调AFAIR传递值,因此
(noEvent)
应该是
()
。如果不使用
过滤器
首先
,则在您离开当前路线之前不会调用完整的回调。我在这里遗漏了一些内容,当我使用
过滤器
首先
时,
事件
()
work.Tested on 1.当控件到达路线更改的catch块时2.没有路线更改。抱歉,搞错了。完成的是第三次回调,而不是第二次。我将更新我的答案。不,谢谢你的建议,我将尝试找到解决方法。
.catch((error: any) => {
        if (this.routerSubscription)
            this.routerSubscription.unsubscribe();
        this.routerSubscription =  this._router.events.subscribe(
            (event) => {
                if (event instanceof NavigationEnd) {
                   // code if router event occurs
                    this.routerSubscription.unsubscribe();
                }
            }
        );

        // code if no router event occurs
      return  Observable.throw(error);
  });