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

问题描述

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

具有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 ...
      }
    )
  }

哪个是更好的解决方案?

解决方法

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

您可以查看文档:{​​{3}}

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

有些不需要观察的异常观测值。 可观察到的ActivatedRoute除外。

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

,

您可以找到该问题以供参考

Angular is it necessary to unsubscribe from this.activatedRoute subscriptions

但是我想说,只要您订阅了某个东西,退订始终是一个好习惯。取消订阅的方式多种多样,我们只需使用一个额外的订阅变量就可以做到这一点

在这种情况下,我也总是喜欢退订