angular - 使用 ngIf 显示嵌套数组中的错误
问题描述
我有以下 HTML
<div formArrayName="reservation_and_confirmation" *ngFor="let _reservation_and_confirmation of form.get('reservation_and_confirmation').controls; let i = index;" class="row">
<div class="wrapper">
<h4>
{{ 'reservation_and_confirmation' | translate }} {{ 0 == i ? '' : '-' }} {{ 0 == i ? '' : i }}
</h4>
<a class="add-button pull-right" href="#" (click)="updateMultiInputField('reservation_and_confirmation', i)">
<span aria-hidden="true" class="glyphicon glyphicon-{{0 == i ? 'plus' : 'minus'}}"></span>
</a>
</div>
<div (domChange)="onInputClone('reservation_and_confirmation', i, $event)" class="form-horizontal main-content">
<span [formGroupName]="i">
<div class="form-group main-form-block">
<label for="venue-type" class="col-sm-6 control-label">{{ 'contact_person' | translate }} *</label>
<div class="col-sm-6 form-input">
<input formControlName="name" type="text" class="form-control">
<ng-container *ngFor="let errorMessage of errors.reservation_and_confirmation; let _i = index">
<span class="error-msg" *ngIf="_i == i && errorMessage.name">{{errorMessage.name}}</span>
</ng-container>
</div>
</div>
<div class="form-group main-form-block">
<label for="venue-type" class="col-sm-6 control-label">{{ 'title' | translate }} *</label>
<div class="col-sm-6 form-input">
<select formControlName="title" class="selectpicker" title="{{ 'select' | translate }}" id="venue-type">
<option value="mr">Mr.</option>
<option value="mrs">Mrs.</option>
<option value="ms">Ms.</option>
<option value="dr">Dr.</option>
<option value="prof">Prof.</option>
</select>
<ng-container *ngFor="let errorMessage of errors.reservation_and_confirmation; let _i = index">
<span class="error-msg" *ngIf="_i == i && errorMessage.title">{{errorMessage.title}}</span>
</ng-container>
</div>
</div>
<div class="form-group main-form-block">
<label for="venue-type" class="col-sm-6 control-label">{{ 'position' | translate }} *</label>
<div class="col-sm-6 form-input">
<input formControlName="designation" type="text" class="form-control">
<ng-container *ngFor="let errorMessage of errors.reservation_and_confirmation; let _i = index">
<span class="error-msg" *ngIf="_i == i && errorMessage.designation">{{errorMessage.designation}}</span>
</ng-container>
</div>
</div>
<div class="form-group main-form-block">
<label for="venue-type" class="col-sm-6 control-label">{{ 'work_email' | translate }} *</label>
<div class="col-sm-6 form-input">
<input formControlName="email" type="text" class="form-control">
<ng-container *ngFor="let errorMessage of errors.reservation_and_confirmation; let _i = index">
<span class="error-msg" *ngIf="_i == i && errorMessage.email">{{errorMessage.email}}</span>
</ng-container>
</div>
</div>
<div class="form-group main-form-block">
<label for="venue-type" class="col-sm-6 control-label">{{ 'phone_number' | translate }} *</label>
<div class="col-sm-6 form-input">
<input formControlName="phone_number" type="text" class="form-control phonepicker">
<ng-container *ngFor="let errorMessage of errors.reservation_and_confirmation; let _i = index">
<span class="error-msg" *ngIf="_i == i && errorMessage.phone_number">{{errorMessage.phone_number}}</span>
</ng-container>
</div>
</div>
<div class="form-group main-form-block">
<label for="venue-type" class="col-sm-6 control-label">{{ 'fax_number' | translate }} *</label>
<div class="col-sm-6 form-input">
<input formControlName="fax_number" type="text" class="form-control phonepicker">
<ng-container *ngFor="let errorMessage of errors.reservation_and_confirmation; let _i = index">
<span class="error-msg" *ngIf="_i == i && errorMessage.fax_number">{{errorMessage.fax_number}}</span>
</ng-container>
</div>
</div>
</span>
</div>
</div>
我想在相应的字段中显示错误,如您所见,我正在使用FormArray
循环和克隆元素。
这是我从服务器收到的示例错误消息。
{
"status":"error",
"message":"Please fix the error and resubmit the form.",
"errors":{
"reservation_and_confirmation":[
{
"designation":"This value is required",
"email":"This value is required",
"phone_number":"This value is required",
"fax_number":"This value is required"
},
{
"title":"This value is required",
"designation":"This value is required",
"email":"This value is required",
"phone_number":"This value is required",
"fax_number":"This value is required"
}
],
"special_order_information":[
{
"name":"This value is required",
"title":"This value is required",
"designation":"This value is required",
"email":"This value is required",
"phone_number":"This value is required",
"fax_number":"This value is required"
}
],
"accounting_department_authorised_contact":[
{
"name":"This value is required",
"title":"This value is required",
"designation":"This value is required",
"email":"This value is required",
"phone_number":"This value is required",
"fax_number":"This value is required"
}
]
}
}
我想根据索引显示错误消息,这就是我的做法。
<ng-container *ngFor="let errorMessage of errors.reservation_and_confirmation; let _i = index">
<span class="error-msg" *ngIf="_i == i && errorMessage.name">{{errorMessage.name}}</span>
</ng-container>
这适用于错误消息的索引从 0 开始(错误消息中的索引映射到 FormArray 元素索引),在某些情况下,例如如果第一个FormArray
元素没有错误,则第一个索引为 1,在这种情况下它会引发错误。
如何使用具有正确索引的 ngIf 显示错误消息。
谢谢。
解决方案
推荐阅读
- swift - 不同类型对象数组的 SwiftUI 抽象视图
- node.js - 根据现有的创建和检查唯一名称
- angular - 在 Ionic 和 Angular 中创建表单时收到错误
- space-complexity - 如何计算每次迭代时内存使用的空间复杂度
- python - 如何将 python 连接到 Oracle Application Express
- go - undefined main - 测试代码无法访问主包
- python-3.x - 使用 Python Tkinter 基于多个单选按钮选择显示列表
- node.js - 找不到固定消息的方法
- graphql - 有没有办法让阿波罗反应的 HTTPS 端点?
- reactjs - 提交我的 React 表单后,是否有更简单的方法将对象传递到我要重定向到的页面?