【问题标题】:Angular Unsubscribe on Reactive form反应形式的角度退订
【发布时间】:2020-07-22 23:27:41
【问题描述】:

我有一个组件充当大型容器组件的子组件,该组件编排稍大的表单(使用反应式表单)

我有这段代码:

ngOnInit() {
    this.subscriptions.push(this.form.get('total').valueChanges.subscribe(data => {
      this.cdr.markForCheck();
    }));
  }

ngOnDestroy(): void {
    this.subscriptions.forEach((sub) => {
        sub.unsubscribe();
    })
}

问题:这是必需的吗?即使组件与表单一起被销毁?

【问题讨论】:

  • ngOnDestroy 中取消订阅并不总是绝对必要的,但这是一个很好的做法。为什么它并不总是必要的?因为在某些情况下 Observables complete 自己,例如与http 客户。销毁一个组件并不等同于取消订阅它的订阅。这就是为什么取消订阅是一种很好的做法,以避免订阅在应用程序中徘徊。
  • 我想你的答案在这里:stackoverflow.com/questions/38008334/…
  • 我认为这个答案可能会有所帮助,看看这个:stackoverflow.com/a/57009988/8578281

标签: angular rxjs angular-reactive-forms


【解决方案1】:

如果它是一个完成的序列(如 http 请求),则不需要手动清理(假设您在控制器中手动订阅)。

如果它是一个无限序列,比如这个,你应该取消订阅。

为了以防万一,取消订阅所有 observables 被认为是一种很好的做法。

我为此使用subsink。 John Papa 在视频中谈到了这个并推荐了这个库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多