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

Jac*_*ack 8 javascript observable ngrx angular

当使用valueChanges订阅Angular Abstract Control中的更改时,是否有必要?unsubscribe()

我经常这样做:

// this.form is a FormGroup within a Component.

this.form.valueChanges.subscribe(_ => {
  console.log(this.form.value);
});
Run Code Online (Sandbox Code Playgroud)

但是我应该自己管理订阅吗(就像我通常所做的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();
   }
}
Run Code Online (Sandbox Code Playgroud)

我之前没有这样做的唯一原因是因为关于 Angular Forms 的教程、示例和文档通常会省略存储对订阅的引用,而是按原样使用valueChanges

相反,ngrx 教程似乎强调了取消订阅以避免内存泄漏的重要性。

Edu*_*gas 5

是的,这是必要的,但您可以使用 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();
}
Run Code Online (Sandbox Code Playgroud)

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