Как удалить конкретную подписку в нескольких списках подписчиков в угловых 7 FormGroup valueChanges? - PullRequest
0 голосов
/ 17 мая 2019

Я использую угловую функцию подписки 7 Multiple FormControl valueChanges.

как удалить или отменить подписку для определенной функции подписки FormControl.

FormControlsSubscribe(){
  const FormControlsArray = Object.keys(this.FGroup.controls);
     FormControlsArray.map(controlName => {
     const control = this.FGroup.controls[controlName] as FormControl;
     control.valueChanges.subscribe(change => {
        console.log(controlName + '>>>' + change);
     });
  });
};



RemoveControl(ControlKey: any) {
  this.FGroup.removeControl(ControlKey);
}

Я ожидаю, что удаленный элемент управления отписался;

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Вы можете использовать takeUntil для автоматической отмены подписки:

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

control.valueChanges
pipe(takeUntil(this.unsubscribe$))
.subscribe(_ => {
  console.log(controlName + '>>>' + change);
});

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

или вы можете назначить control.valueChanges.subscribe переменной (подписка) и отменить подписку.

let subs: Subscription[] = [];

FormControlsArray.map(controlName => {
  const control = this.FGroup.controls[controlName] as FormControl;
  this.subs.push(control.valueChanges.subscribe(() => {}));
});

ngOnDestroy() {
  this.subs.forEach(sub => sub.unsubscribe());
  this.subs = [];
}
0 голосов
/ 17 мая 2019

Учитывая, что вы не назначаете control.valueChanges.subscribe какой-либо переменной, вы не можете.

Кроме того, у вас будут серьезные утечки памяти с этим кодом. Вы никогда не закрываете свои подписки, это очень опасный способ управлять ими.

...