有没有办法知道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);
});