Почему 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.

Другие вопросы по тегам