在代码块中,当路由器事件发生时,以及路由器事件未发生时,我必须有条件地运行几个语句。
我尝试使用路由器订阅变量的closed
属性。这并不有用。我想知道如果我可以检测到如果没有路由器事件,因为如果NO ROUTER事件是同步的,则运行的代码即使路由发生变化也会运行(因为这是异步的并且很少延迟)。
.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);
});
答案 0 :(得分:0)
您可以设置一个标志,以防路由器事件发生,并在完整的回调中,检查是否发生了一个:
bool wasEvent = false;
this.routerSubscription = this._router.events
.filter(e => event instanceof NavigationEnd)
.first() // take only one
.subscribe(
event => wasEvent = true,
(err) => {},
() => console.log(`Router events happened: ${wasEvents}`)
);
);