为什么在执行ControlValueAccessor的detroy组件之后调用writeValue?

时间:2018-01-20 06:25:32

标签: angular forms form-control controlvalueaccessor

我在自己的原始组件中实现了ControlValueAccessor。您看到的代码为:there (plunker)

在父组件中,我使用我的ng-if指令。我可以通过复选框隐藏和显示我的组件。组件每次都会进入并销毁,但writeValue函数调用很多次。请在plunker上查看我的代码

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

1 个答案:

答案 0 :(得分:0)

您需要重新创建控件:

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

正如@Сергей所提到的那样,原因是因为每次创建ControlValueAccessor组件时,它都会在formControl的私有属性中注册其回调函数(例如,_ onChange)。这是数组,它累积了这些函数。其中一个解决方案是创建新的FormControl。