我目前面临一个带有mat-chip-list和输入的奇怪问题。我有一个表单组,它有两个表单控件:contacts和name。
this.form = this.formBuilder.group({
name: ['', [Validators.required]],
contactIds: ['', [Validators.required]]
})
此表单的视图如下所示:
<mat-form-field #contactsChipList>
<mat-chip-list>
<mat-chip *ngFor="let contact of contacts" [removable]="removable" (remove)="removeChipListItem(contact)">
{{ contact.name | titlecase }} {{ contact.surname | titlecase }}
<mat-icon matChipRemove *ngIf="removable"></mat-icon>
</mat-chip>
<input [matChipInputFor]="contactsChipList" placeholder="Contacts" formControlName="contactIds" />
<mat-error *ngIf="form.hasError('required', 'contactIds')">This field is required</mat-error>
</mat-chip-list>
</mat-form-field>
问题:当我从输入字段中删除所有元素时,父窗体(formGroup)被标记为无效,但formGroup的error属性不包含任何值。所以错误从未显示过。
其他尝试:但是当我使用带有matInput属性的普通输入元素而没有mat-chip-list时,当我删除输入字段的内容时,错误会正确显示。
在这种情况下,标记是什么样的:
<div class="form-group">
<mat-form-field>
<input matInput placeholder="Contacts" formControlName="contactIds" />
<mat-error *ngIf="form.hasError('required', 'contactIds')">This field is required</mat-error>
</mat-form-field>
</div>
假设:我现在认为问题在于mat-chip-list元素。我试着调查一下:
@Input()errorStateMatcher: ErrorStateMatcher
但我不知道该如何使用。谷歌对该搜索并不友好。
有没有人遇到过这个问题?如果您需要澄清,请告诉我。
答案 0 :(得分:1)
您应该在<mat-chip-list>
中添加验证程序,并阻止无效项目添加,如下所示。
组件:
export class ExampleComponent {
items = [];
emailFormControl = new FormControl('', [Validators.email]);
addItem(event) {
if (this.emailFormControl.valid) {
items.push(event.value)
}
}
.
.
.
}
模板:
<mat-form-field>
<mat-chip-list [formControl]="emailFormControl">
.
.
.
</mat-chip-list>
</mat-form-field>
<强> Editted:强>
您似乎使用FormGroup
。您必须将ngDefaultControl
添加到mat-chip-list
,如下所示。您可以阅读一个很好的解释here。
<mat-form-field>
<mat-chip-list ngDefaultControl [formControl]="form.controls.contactIds">
.
.
.
<mat-error *ngIf="form.controls.contactIds.hasError('required', 'contactIds')">This field is required</mat-error>
</mat-chip-list>
</mat-form-field>