У меня есть вход 'mat-form-field'
, на котором я отображаю список mat-chip
элементов, которые представляют разные размеры одежды. Фишки могут быть 'L'
, 'S'
и т.д ...
В настоящее время я перебираю список всех размеров и показываю их:
`
<mat-chip-list formArrayName="sizes" #chipList [multiple]="true" [selectable]="true">
<mat-chip #chipRef
*ngFor="let gearSize of gearItemForm.controls['sizes'].value; let i=index"
[selected]="gearSize.size.available"
(click)="gearSize.size.available = !gearSize.size.available; onSelectedChipSize()"
[color]="gearSize.size.color">{{ sizeEnum[gearSize.size.size] }}
</mat-chip>
</mat-chip-list>
<input
matInput
[formGroupName]="0"
placeholder="Gear sizes..."
[matChipInputFor]="chipList"
style="display: none;"
class="gear-size-label"
>
<span>Is form array sizes invalid: {{gearItemForm.get('sizes').touched}}</span>
<mat-error *ngIf="gearItemForm.get('sizes').invalid && gearItemForm.get('sizes').touched">Please select a size</mat-error>
</mat-form-field>
`
Вот как я настраиваю свою форму:
`
this.gearItemForm = this.fb.group({
name: this.fb.control(name, Validators.required),
price: this.fb.control(price, Validators.required),
sizes: this.fb.array(sizesForm, this.requireSize()),
inStock: this.fb.control(inStock)
})
`
Где sizesForm
это:
`
for (let index = 0; index < this.gearSizes.length; index++) {
sizesForm.push(this.fb.group({
'size': this.fb.control(sizes[index])
}))
}
`
Моя проблема в том, что у меня есть пользовательский валидатор, который требует от пользователя выбрать размер элемента перед отправкой нового элемента в магазин. Все работает как положено, но я пытаюсь отобразить сообщение об ошибке, если пользователь не выбирает какие-либо размеры. В настоящее время все это работает, потому что я отключаю кнопку отправки формы, если форма недействительна. Если я не выберу какие-либо фишки, то кнопка «Отправить» формы будет отключена. Однако я не могу заставить форму отображать любые ошибки, используя 'mat-error'
, хотя <mat-error *ngIf="gearItemForm.get('sizes').invalid">Please select a size</mat-error>
возвращает значение true, означающее, что оно недействительно.