您需要取消订阅 Angular 中的路由器参数吗?

问题描述 投票:0回答:2

当您订阅组件中的查询参数时,是否需要取消订阅?我正在努力避免内存泄漏。

带有变量的订阅

unsubscribe()

  subscription$: Subscription

  constructor(private route: ActivatedRoute) {}

  ngOnInit() {
    this.subscription$ = this.route.queryParams.subscribe(
      (params: any): void => {
        // ... Do stuff here ...
      }
    )
  }

  ngOnDestroy() {
    if (this.subscription$ !== undefined || this.subscription$ !== null) {
      this.subscription$.unsubscribe()
    }
  }

无变量订阅

unsubscribe()


  constructor(private route: ActivatedRoute) {}

  ngOnInit() {
    this.route.queryParams.subscribe(
      (params: any): void => {
        // ... Do stuff here ...
      }
    )
  }

哪一个是更好的解决方案?

angular typescript angular-router angular2-observables rxjs-observables
2个回答
3
投票

当组件被销毁时,ActivatedRoute 会取消其所有订阅者的订阅。

您可以查看文档:https://angular.io/guide/router-tutorial-toh#observable-parammap-and-component-reuse

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

有一些特殊的可观察结果是不必要的。 ActivatedRoute 可观察量是例外。

ActivatedRoute 及其可观察量与 Router 隔离 本身。当路由组件不再可用时,路由器会销毁它 需要,注入的 ActivatedRoute 随之消失。


-1
投票

这个问题你可以参考一下

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

但我想说,每当您订阅某些内容时取消订阅始终是一个好习惯。取消订阅的方式有多种,我们只需使用一个额外的订阅变量即可做到这一点

在这种情况下我也总是更喜欢取消订阅

© www.soinside.com 2019 - 2024. All rights reserved.