rxjs 和 angular 路由器事件:在第一次发出后将布尔值设置为初始值

rxjs and angular router events: Set boolean to inital value after first emit

如果 angular 路由器事件被触发,下面的函数应该 return 为真。

private routeChanged$(): Observable<boolean> {
    return this.router.events.pipe(
        filter(event => event instanceof NavigationEnd),
        mapTo(true),
        startWith(false),
        untilDestroyed(this)
    );
}

它工作正常但它也应该在事件被触发后再次重置初始值(false)所以 我基本上想在它第一次发出 true 后将布尔值设置回 false (当路线改变时) (抱歉我的英语不好,我希望你明白我的意思)

你的意思是它应该在 true 之后立即再次发出 false 吗?

在那种情况下你可以这样做:

private routeChanged$(): Observable<boolean> {
    return this.router.events.pipe(
        filter(event => event instanceof NavigationEnd),
        switchMapTo([true, false]),
        startWith(false),
        untilDestroyed(this)
    );
}

switchMapTo 将“订阅”数组——它被解释为一个 Observable 发射两个值,true 和 false。