Почему writeValue вызывается после компонента detroy, который реализует ControlValueAccessor?
Я реализовал ControlValueAccessor в своем собственном примитивном компоненте. Свой код вы видите: там (плункер)
В родительском компоненте я использую директиву with ng-if. Я могу скрыть и показать свой компонент через флажок. Компонент вводится и уничтожается каждый раз, но функция writeValue часто вызывается. Пожалуйста, проверьте мой код на Plunker
Почему это происходит? Как я могу решить эту проблему?
1 ответ
Вам необходимо воссоздать элемент управления:
resetValue() {
this.name = new FormControl('initial');
this.name.setValue('has been reset');
}
Как упомянул @Сергей, причина в том, что каждый раз, когда создается компонент ControlValueAccessor, он регистрирует свои функции обратного вызова в закрытом свойстве formControl (например, _onChange). Это массив, в котором накапливаются эти функции. Одним из решений является создание нового FormControl.