我在Angular2中开发了一个页面,它使用了表单标签,我在表格标签中使用ngFor渲染了输入控件。
我创建了模型(DataModal)来表示每一行表。我创建了模型列表(DataModalList),并在点击按钮(addNewRow)时将每个模型添加到其中
我遇到了在添加新行时删除所选输入值的问题。 当我删除表单标记时,工作正常 我需要表单标签来执行验证。
请在下面找到代码:
型号:
import {DropDownModel} from '../models/dropDownModel';
export class DataModal {
dropdown: DropDownModel[];
selectedValue: string;
constructor() {
this.selectedValue = "0";
}
}
组件:
addNewRow() {
let dataModal = new DataModal();
dataModal.dropdown = response; //values are coming from api
this.DataModalList.push(dataModal);
}
HTML:
<form novalidate #form="ngForm" (ngSubmit)="submitEditForm(form.valid)">
<table>
<tr *ngFor="let item of DataModalList;let i= index ">
<td class="col-md-3">
<div>
<label class="control-label" for="BoxID"> Box Number </label>
<select class="form-control" #BoxID="ngModel" name="BoxID" [(ngModel)]="item.selectedValue">
<option value="0" disabled > -- select -- </option>
<option *ngFor="let element of item.dropdown"
[value]="element.value" >{{element.label}}</option>
</select>
</div>
</td>
<td class="col-md-3">
<div>
<a title="Add" (click)="addNewRow()" class="btn blue btn-sm">
<i class="fa fa-plus"></i>
</a>
</div>
</td>
</tr>
</table></form>
答案 0 :(得分:2)
您的控件需要唯一的名称才能在html页面中正常工作。
因此,在名称属性中也使用 index-i 。 使用下面的代码:
<select class="form-control" #BoxID="ngModel" name="BoxID-{{i}}"
[(ngModel)]="item.selectedValue" [ngModelOptions]="{standalone: true}>
<option value="0" disabled > -- select -- </option>
<option *ngFor="let element of item.dropdown"
[value]="element.value" >{{element.label}}
</option>
</select>