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

Posted

技术标签:

【中文标题】您是不是需要取消订阅 Angular 中的路由器参数?【英文标题】:Do you need to unsubscribe from a subscription to router params in Angular?您是否需要取消订阅 Angular 中的路由器参数? 【发布时间】:2020-12-07 17:29:02 【问题描述】:

订阅组件中的查询参数时,需要退订吗?我正在努力避免内存泄漏。

订阅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 ...
      
    )
  

哪个是更好的解决方案?

【问题讨论】:

queryparams is deprecated, you shouldn't be using this 两个较旧的属性仍然可用,但是,它们的替代品更可取,因为它们可能在未来的 Angular 版本中被弃用。 路由销毁时ActivatedRoute被清空,无需手动退订。 【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

你可以找到这个问题以供参考

Angular is it necessary to unsubscribe from this.activatedRoute subscriptions

但我会说,只要您订阅了某些内容,就取消订阅始终是一个好习惯。它们有多种取消订阅的方法,我们只需使用一个额外的订阅变量即可做到这一点

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

【讨论】:

以上是关于您是不是需要取消订阅 Angular 中的路由器参数?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 - 订阅 FormControl 的 valueChanges 是不是需要取消订阅?

我需要手动取消订阅吗? - Angular 8 [重复]

在路由器订阅中调用订阅方法时,我是不是应该取消订阅 ActivatedRoute?

我需要取消订阅 Angular Observable 吗? [复制]

取消订阅 Angular 中的 observable

我应该取消订阅根 Angular 组件中的 observables 吗?