提问者:小点点

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


当你在组件中订阅查询参数时,你需要取消订阅吗?我试图避免内存泄漏。

订阅变量为取消订阅()

  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()
    }
  }

取消订阅()的无变量订阅


  constructor(private route: ActivatedRoute) {}

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

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


共2个答案

匿名用户

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

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

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

有一些例外的可观察对象不需要这样做。ActivatedRoute可观察对象是例外之一。

ActivatedRoute及其可观察对象与路由器本身隔离。当不再需要路由组件并且注入的ActivatedRoute随其一起死亡时,路由器会销毁路由组件。

匿名用户

你可以找到这个问题作为参考

Angular是否有必要取消订阅this. tivatedRoute订阅

但是我想说,每当您订阅某事时取消订阅总是一个很好的做法。它们有多种方法可以取消订阅,我们可以只使用一个额外的变量进行订阅

我总是喜欢退订在这种情况下以及