首页 > 解决方案 > 您是否需要取消订阅 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 ...
      }
    )
  }

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

标签: angulartypescriptangular-routerangular2-observablesrxjs-observables

解决方案


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

您可以查看文档:https ://angular.io/guide/router#!#reuse

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

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

ActivatedRoute 及其 observables 与 Router 本身是绝缘的。当不再需要路由组件并且注入的 ActivatedRoute 随之消亡时,Router 会销毁路由组件。


推荐阅读