onTouched никогда не вызывается при использовании пользовательского компонента с ControlValueAccessor - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь заставить вложенные / вложенные формы работать с пользовательскими компонентами, использующими интерфейс ControlValueAccessor.

У меня здесь демонстрация stackblitz https://stackblitz.com/edit/angular-jg2p8c

Я не могу понять, почему изменение формы Info (желтое поле) не изменяет свойство touched объекта infoForm.

1 Ответ

0 голосов
/ 07 февраля 2020

Предоставление NG_VALUE_ACCESSOR недостаточно. Вам также необходимо реализовать интерфейс ControlValueAccessor , что означает, что вы берете функцию аргумента registerOnTouched(fn), а затем вызываете ее при касании элемента управления. В противном случае формы не связаны.

onTouched = () => void;

constructor() {
  this.form.statusChanges.pipe(
    first(() => this.form.touched),
  ).subscribe(
    () => this.onTouched()
  )
}

registerOnTouched(fn) {
  this.onTouched = fn;
}
...