将自定义组件与ControlValueAccessor一起使用时不会调用onTouched

时间:2020-02-07 14:26:56

标签: angular angular-reactive-forms

我正在尝试使用使用ControlValueAccessor接口的自定义组件来嵌套/子表单。

我在这里https://stackblitz.com/edit/angular-jg2p8c

有一个stackblitz演示

我无法弄清楚为什么更改“信息”表单(黄色框)不会更改touched对象上的infoForm属性。

1 个答案:

答案 0 :(得分:0)

仅提供NG_VALUE_ACCESSOR是不够的。您还需要实现ControlValueAccessor interface,这意味着您要使用registerOnTouched(fn)参数函数,然后在触摸控件时调用它。否则,表单将无法连接。

onTouched = () => void;

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

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