【问题标题】:Angular is it necessary to unsubscribe from this.activatedRoute subscriptionsAngular 是否有必要取消订阅 this.activatedRoute 订阅
【发布时间】:2019-01-31 00:38:15
【问题描述】:

我的代码:

ngOnInit() {

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

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

}

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

出于习惯,我总是取消订阅,但不确定是否有必要。

谢谢

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    我宁愿取消订阅,然后控制异常。看起来更容易维护。

    类似的东西

      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】:

      不,您不需要取消订阅路由可观察对象

      来自Documentation

      当订阅组件中的 observable 时,您几乎总是 安排在组件被销毁时取消订阅。

      有一些特殊的 observables 是不必要的。 ActivatedRoute 可观察对象属于例外。

      ActivatedRoute 及其 observables 与 Router 隔离 本身。当路由组件不再存在时,路由器会销毁它 需要,注入的 ActivatedRoute 也随之消亡。

      请随时取消订阅。它是无害的,绝不是坏事 练习。

      【讨论】:

      • 仅供参考,文档是这么说的,但在 Angular 的最新版本中,它似乎并不总是如此。未从 ActivatedRoute 取消订阅导致我的应用程序出现大量内存泄漏。
      【解决方案3】:

      通常,当您的组件销毁时,所有订阅的 observable 都会自动取消订阅,很少有例外。但activatedRoute 不是其中之一。当路由器从一个路由组件退出时,它会连同注入的activatedRoute一起销毁该组件

      【讨论】:

        【解决方案4】:

        对于激活的路由 observable 是个例外,因为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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-12
          • 2019-09-07
          • 1970-01-01
          • 1970-01-01
          • 2018-04-19
          • 2021-11-18
          • 1970-01-01
          相关资源
          最近更新 更多