使用Angular Abstract Control订阅valueChanges中的更改时,是否有必要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 Forms的教程,示例和文档通常会省略存储对预订的引用,而是直接使用valueChanges
相反,ngrx教程似乎强调了取消订阅以避免内存泄漏的重要性。
答案 0 :(得分:0)
是的,但是有必要,但是您可以使用take直到。
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