Должен ли я отписаться от изменений угловой формы? - PullRequest
0 голосов
/ 26 июня 2018

При подписке на изменения в 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();
   }
}

Единственная причина, по которой я не сделал это ранее, заключается в том, что учебные пособия, примеры и документация по угловым формам обычно не содержат ссылки на подписку, а вместо этого просто используйте valueChanges в качестве есть.

И наоборот, учебники по ngrx подчеркивают важность отказа от подписки во избежание утечек памяти.

1 Ответ

0 голосов
/ 26 июня 2018

Да, это необходимо, но вы могли бы использовать до тех пор, пока не взяли.

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

...