为什么 writeValue 在销毁实现了 ControlValueAccessor 的组件后调用?

Why writeValue called after detroy component which implements ControlValueAccessor?

我已经在我自己的原始组件中实现了 ControlValueAccessor。它的代码你看:there (plunker)

在父组件中,我使用了 with ng-if 指令。我可以通过复选框隐藏和显示我的组件。组件每次初始化和销毁​​,但 writeValue 函数调用很多次。请在 plunker

查看我的代码

为什么会这样?我该如何解决这个问题?

您需要重新创建控件:

  resetValue() {
    this.name = new FormControl('initial');
    this.name.setValue('has been reset');
  }

如@Сергей所述,原因是每次创建ControlValueAccessor组件时,它都会在formControl的私有属性中注册其回调函数(例如,_onChange)。这就是数组,它把这些函数累积起来。解决方案之一是创建新的 FormControl。