пример stackblitz
Я создал CustomInputComponent и CustomElementErrorsComponent.
Оба компонента используют стратегию OnPush.
CustomInput содержит стандартный тег ввода и CustomElementErrors.
CustomElementErrors отображает элемент управления формыошибки.
Я передаю имя FormGroup и FormControl внутри CustomInput.
(По замыслу я не передаю formControl как @Input)
(И я не реализую ControlValueAccessor)
Я реализую ngDoCheck в CustomInput для вызова markForCheck и обновления представления в CustomElementErrors.
Но когда я нажимаю кнопку markAsTouched, все компоненты Errors меняют «затронутые» с false на true, за исключением компонента ошибок внутри последнего ввода.
Я могуне понимаю почему.Та же ситуация для тега select и других элементов формы.
Я нашел два решения:
- Добавить
control.updateValueAndValidity()
внутри метода markAsTouched.Это не очевидно для новых людей. - Добавить новый «тронутый» входной параметр для компонента «Ошибки».И Angular будет запускать обновление.Но мне также нужно использовать markForCheck. Пример с дополнительным @ Input
Итак, у меня два вопроса:
- Почему это не работает?
- Это другой способ использовать OnPush внутри родителя и его ребенка / детей?
Я также читал этот
ответ .
Спасибо.