具有switchMap复制输出的路由器事件

问题描述 投票:1回答:1

我已经解决了我的问题,但是我想了解为什么会这样。

我在敲击我的头读物和东西,但是找不到为什么它在subscribe块上复制输出的原因。

这里是带有代码的堆叠闪电战

https://stackblitz.com/edit/angular-szwnz7

我的思路是。

在该组件上,在每个要导航段类型的路由器事件上,我都想获取段ID。

但是路由器事件中没有什么让我感兴趣。因此,我使用switchMap Observable进行了activatedRoute.queryParamMap处理,以便在订阅块内部获取ID号。

并且每次我在链接之间单击时,它都会显示两个console.logs。

angular rxjs rxjs6
1个回答
0
投票

[想象一下this.route.queryParamMap充当BehaviorSubject,这意味着,一旦您订阅它,您将获得现有值,而新值随后到达。

现在解释您的代码,单击链接时会发生什么:

  • [this.router.events发出新的NavigationEnd,然后切换到this.route.queryParamMap
  • [this.route.queryParamMap具有现有值,并且此现有值到达订阅
  • this.route.queryParamMap,您现在已订阅此Observable。由于导航,新的价值也到达了这里。 this.router.eventsthis.route.queryParamMap都是独立的Observable,在导航时均会发射。所以这就像比赛条件。由于this.router.events切换为this.route.queryParamMap的现有值,因此获得第一个值,而另一个则直接来自this.route.queryParamMap。这就是为什么另一个值到达订阅的原因。
© www.soinside.com 2019 - 2024. All rights reserved.