我在自己的原始组件中实现了ControlValueAccessor。您看到的代码为:there (plunker)
在父组件中,我使用我的ng-if指令。我可以通过复选框隐藏和显示我的组件。组件每次都会进入并销毁,但writeValue函数调用很多次。请在plunker上查看我的代码
为什么会这样?我如何解决这个问题?
答案 0 :(得分:0)
您需要重新创建控件:
resetValue() {
this.name = new FormControl('initial');
this.name.setValue('has been reset');
}
正如@Сергей所提到的那样,原因是因为每次创建ControlValueAccessor组件时,它都会在formControl的私有属性中注册其回调函数(例如,_ onChange)。这是数组,它累积了这些函数。其中一个解决方案是创建新的FormControl。