当内部有switchMap运算符时,Angular ActivateRoute paramMap不会取消订阅

时间:2019-10-11 16:28:33

标签: angular rxjs

我想订阅activatedRoute并仅在第一次时读取参数(例如ngOnInit)。我正在内部使用switchMap,使用从params中的id从服务器获取数据。

ngOnInit() {
  this.activatedRoute.paramMap
    .pipe(
      take(1),
      filter((params) => params.has('id')),
      switchMap((params) => {
        this.loading = true
        return this.jobReportService.get(+params.get('id'))
      }),
      tap((jobReport) => {
        this.layoutForm.setValue(jobReport)
        this.loading = false
      }),
    )
    .subscribe()
}

问题是当我尝试离开该组件时,paramMap订阅仍处于活动状态(即使我使用了take(1)),并且触发了另一个switchMap操作,导致使用undefined进行API调用。这将导致HTTP错误并停止导航。我究竟做错了什么?

0 个答案:

没有答案