我应该取消订阅Angular表单更改吗?

9
当使用valueChanges订阅Angular Abstract Control的更改时,是否需要unsubscribe()
我经常这样做:
// this.form is a FormGroup within a Component.

this.form.valueChanges.subscribe(_ => {
  console.log(this.form.value);
});

但是我是否应该像通常管理 ngrx 一样自己管理订阅呢?:

import { Subscription } from 'rxjs';

// this.subscription is ngrx Subscription.

this.subscription = this.form.valueChanges.subscribe(_ => {
      console.log(this.form.value);
});

public ngOnDestroy() {
  if (this.subscription) {
      this.subscription.unsubscribe();
   }
}

我之前没有这样做的唯一原因是,Angular表单相关的教程、示例和文档通常省略存储订阅的引用,而只是直接使用 valueChanges
相反,ngrx的教程似乎强调取消订阅以避免内存泄漏。

1
非常好的问题,我也在思考,我点赞了 :) - user6600549
1个回答

7

是的,这是必要的,但您也可以使用take until。

private unsubscribe$: Subject<void> = new Subject<void>();

this.subscription = control.valueChanges
 pipe(takeUntil(this.unsubscribe$))
 .subscribe(_ => {
      console.log(this.form.value);
});

 ngOnDestroy() {
    this.unsubscribe$.next();
    this.unsubscribe$.complete();
}

https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87


1
你能给我们一些参考资料吗? - Mateut Alin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接