Angular有必要取消this.activatedRoute订阅

时间:2018-08-24 13:55:01

标签: angular rxjs

我的代码:

ngOnInit() {

  this.activatedRoute.params.subscribe((params: Params) => {
    // do stuff
  })

  this.activatedRoute.data.subscribe((data: any) => {
    // do stuff
  })

}

我的问题是...我需要在ngOnDestroy中取消订阅吗?

出于习惯,我总是退缩,但不确定在这里是否有必要。

谢谢

4 个答案:

答案 0 :(得分:2)

不,您不需要取消订阅可观测路线

Documentation

  

订阅组件中的可观察对象时,您几乎总是   安排在组件销毁时退订。

     

有一些不需要观察的例外观察点。   可观察到的ActivatedRoute除外。

     

ActivatedRoute及其可观察物与路由器绝缘   本身。当路由组件不再存在时,它会销毁它   需要,注入的ActivatedRoute随之死亡。

     

随时可以退订。它是无害的,永远不会坏   练习。

答案 1 :(得分:2)

我宁愿取消所有订阅然后控制例外。似乎更易于维护。

类似这样的东西

  ngOnInit() {
    this.subscriptions.push(
      this.activatedRoute.params.subscribe((params: Params) => {
        // do stuff
      }));

    this.subscriptions.push(
      this.activatedRoute.data.subscribe((data: any) => {
        // do stuff
      }));
  }

  ngOnDestroy() {
    this.subscriptions.forEach((subscription: Subscription) => {
      subscription.unsubscribe();
    });
  }

请在此处查看示例:https://stackblitz.com/edit/angular-unsubscribing-then-all?file=src/app/app.component.ts

答案 2 :(得分:1)

对于激活的路由,可观察到的是一个例外,因为The ActivatedRoute and its observables are insulated from the Router itself. The Router destroys a routed component when it is no longer needed and the injected ActivatedRoute dies with it.

来源:Angular Doc

答案 3 :(得分:1)

通常,当您的组件销毁时,所有订阅的可观察对象都会自动取消订阅,只有少数例外。但是activatedRoute并不是其中之一。当路由器从路由组件退出时,它将破坏该组件以及注入的activatedRoute