Не удается обновить элемент внутри последнего ввода, используя OnPush для родительского и дочернего элементов - PullRequest
0 голосов
/ 20 ноября 2018

пример stackblitz

Я создал CustomInputComponent и CustomElementErrorsComponent.
Оба компонента используют стратегию OnPush.
CustomInput содержит стандартный тег ввода и CustomElementErrors.
CustomElementErrors отображает элемент управления формыошибки.

Я передаю имя FormGroup и FormControl внутри CustomInput.
(По замыслу я не передаю formControl как @Input)
(И я не реализую ControlValueAccessor)

Я реализую ngDoCheck в CustomInput для вызова markForCheck и обновления представления в CustomElementErrors.
Но когда я нажимаю кнопку markAsTouched, все компоненты Errors меняют «затронутые» с false на true, за исключением компонента ошибок внутри последнего ввода.
Я могуне понимаю почему.Та же ситуация для тега select и других элементов формы.

Я нашел два решения:

  1. Добавить control.updateValueAndValidity() внутри метода markAsTouched.Это не очевидно для новых людей.
  2. Добавить новый «тронутый» входной параметр для компонента «Ошибки».И Angular будет запускать обновление.Но мне также нужно использовать markForCheck. Пример с дополнительным @ Input


Итак, у меня два вопроса:
  1. Почему это не работает?
  2. Это другой способ использовать OnPush внутри родителя и его ребенка / детей?


Я также читал этот ответ .

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...