Маркировка всего FormGroup
как touched
не приведет к тому, что его дети будут тронуты.Это то, что вам придется делать явно, так как Angular не собирается делать это неявно.Прочитайте эту ветку для получения дополнительной информации об обосновании этого.
При этом вы можете явно вызывать markAsTouched
для каждого FormControl
в каждом FormGroup
в 'products'
FormArray
.
Вот как:
(<FormArray>this.form.get('products')).controls.forEach((group: FormGroup) => {
(<any>Object).values(group.controls).forEach((control: FormControl) => {
control.markAsTouched();
})
});
Вот Рабочий образец StackBlitz для вашегоref.
PS: я внес еще несколько изменений в mat-error
s, чтобы они отображались только тогда, когда FormField
s touched
и недействительны.Кроме того, идеальным пользовательским интерфейсом было бы disable
кнопка Сохранить в первую очередь.И покажите пользователю ошибку, когда они касаются полей.Кроме того, маркировка полевых меток как обязательная (*
) может рассматриваться как хороший UX.