Я пытаюсь разобраться с большой формой, создающей пользовательский компонент для каждого раздела, размещая всю логику и пользовательскую проверку в каждом пользовательском компоненте.По сути, каждый раздел является субформой, и каждый из них вносит свой вклад в процесс проверки большой формы.
Я также использую Angular Material, и мои пользовательские компоненты настраивают элемент управления полем формы реализуютинтерфейс MatFormField<T>
, таким образом, я смогу использовать красивый внешний вид, чтобы показать ошибку и подсказку о компоненте в целом.
По этой причине я оборачиваю свой пользовательский компонент внутри<mat-form-field>
и даже поля формы в шаблоне пользовательского компонента заключены в <mat-form-field>
.
Но у меня проблема с этим решением и угловым материалом.Если поле в подформе недопустимо, <mat-error>
для пользовательского компонента отображается правильно и даже <mat-error>
для внутреннего поля формы отображается.Проблема также в том, что все остальные поля становятся красными, как будто они недействительны, но на самом деле это не так!
Вот пример: https://stackblitz.com/edit/angular-2h2fql?embed=1&file=src/app/app.component.ts
каждое поле обязательно для заполнения, просто попробуйте очистить одно из них или добавить новую строку, и даже все остальные поля станут красными.
Я думаю, что это просто CSS, потому что когда <mat-form-field>
недопустим, класс сообщений <mat-error>
отображается и класс mat-form-field-invalid
применяется к элементу хоста <mat-form-field>
, который поворачиваетсякрасным цветом недопустимое поле.
Мой вопрос: знает ли кто-нибудь, можно ли вручную отобразить <mat-error>
или установить элемент управления пользовательской формы в состоянии ошибки, не применяя класс .mat-form-field-invalid
к хосту?element?
Насколько я понимаю, этот класс связан с состоянием ошибки, как вы можете видеть здесь
https://github.com/angular/material2/blob/master/src/lib/form-field/form-field.ts#L120
, но я не могу найти элегантное решение дляпреодолеть эту проблему.
Я пытался применить инкапсуляцию вида ShadowDOM, но она не работает нормально.
Я просто не мог поместить свой пользовательский элемент управления формы в <mat-form-field>
, и он будетработать нормально и <mat-error>
будет отображаться, ноне в смысле дизайна материала.
Я ошибаюсь или это какая-то проблема с угловым материалом?
надеюсь, мое объяснение понятно, спасибо