angular - 访问 *ngFor 内部的表单组控件
问题描述
在模板文件中,我正在迭代一个元素数组,并为每个元素插入一个单独的行。
每个元素都有相同的控件集,但是每当我在其中一个输入字段中输入错误值时,所有其他输入控件上都会出现相同的错误消息。我需要它来仅验证当前输入字段。
希望我解释清楚。下面是我的模板代码:
<tr *ngFor="let element of elements">
<td>
<input matInput
formControlName="elementNamePrefix"
[required]="controls.elementNamePrefix.required"
[placeholder]="controls.elementNamePrefix.displayName"
[type]="controls.elementNamePrefix.type">
<mat-error *ngIf="group.get('elementNamePrefix').hasError('maxlength')">
Max length is XY characters!
</mat-error>
</td>
</tr>
解决方案
根据我的理解parts
是一个formArray
. 因此,您必须根据该索引找到 formGroup 以在该特定控件中显示错误消息。
<mat-error>
在容器中尝试这种情况。
<tr *ngFor="let part of parts; let i=index">
<td>
<input matInput
formControlName="partNamePrefix"
[required]="controls.partNamePrefix.required"
[placeholder]="controls.partNamePrefix.displayName"
[type]="controls.partNamePrefix.type">
<mat-error *ngIf="getFormGroup(i).get('partNamePrefix').hasError('maxlength')">
Max length is XY characters!
</mat-error>
</td>
</tr>
TS:
getFormGroup(index: number) {
return (this.parts.controls.find((_controls, groupIndex) => (groupIndex === index)) as FormGroup)
}
推荐阅读
- dataframe - 使用 MAX 阈值而不是 MIN 阈值删除 NA 值
- r - 在 Complex Upset 中通过设置颜色手动着色点
- winrt-xaml - 无法创建“Syncfusion.UI.Xaml.Schedule.ScheduleAppointmentEditor”类型的实例
- spring - Spring @AliasFor 不适用于 @Profile 注释
- swiftui - 如何在 swiftUI 中推送详细信息页面并删除所有以前的导航链接?
- flutter - Flutter:如何在 textformfield 中加下划线
- javascript - 如何在 NightmareJS 上解析 defi 项目?
- android - 在低于 Android O 的设备上,如何以编程方式检测气泡或浮动通知是否打开?
- asp.net-core - 如何通过 ASP.NET 在 FOREACH 中使用表单
- c++ - Raspbian Bullseye (11) 错误中的原子链接