Angular是否需要取消订阅this.activatedRoute订阅

dan*_*y74 3 rxjs angular

我的代码:

ngOnInit() {

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

作为习惯问题,我总是取消订阅,但不确定这里是否有必要。

谢谢

Sur*_*yan 5

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

来自文档

当订阅组件中的可观察对象时,您几乎总是在组件被销毁时取消订阅。

然而,ActivatedRoute observables 是例外,因为 ActivatedRoute 及其 observables 与 Router 本身是隔离的。当不再需要路由组件时,路由器会销毁它。这意味着组件的所有成员也将被销毁,包括注入的 ActivatedRoute 及其 Observable 属性的订阅。

Router 不会完成ActivatedRoute 的任何Observable,因此任何finalize 或complete 块都不会运行。如果你需要在 Finalize 中处理某些事情,你仍然需要在 ngOnDestroy 中取消订阅。如果您的可观察管道因组件被销毁后您不希望运行的代码而出现延迟,您还必须取消订阅。

  • 仅供参考,文档是这么说的,但截至 Angular 的最新版本,它似乎仍然不总是正确的。未从 ActivatedRoute 取消订阅导致我的应用程序中出现大量内存泄漏。 (3认同)