Angular ngRepeat 中的表单验证
Angular Form Validation inside ngRepeat
我有一系列 table 行,在 ng-repeat 中有各种输入,我正在尝试使用 angular 的内置表单验证来处理必填字段。一切正常,除了当我删除数组中支持 ng-repeat 的项目之一时。
这是我设置验证的方式
<td ng-class="{ 'has-error' : vm.testForm.itemName{{$index}}.$invalid }">
<input type="text"
name="itemName{{$index}}"
class="form-control"
ng-model="item.name"
required />
<div class="help-block"
ng-show="vm.testForm.itemName{{$index}}.$invalid"
ng-messages="vm.testForm['itemName'+$index].$error">
<span ng-message="required">Name is required</span>
</div>
</td>
Plunker 显示我的问题
https://plnkr.co/edit/Q1qyqlSG69EXR2lTrsHk
在 plunker 中,如果删除第一个 table 行,您会注意到虽然最后一行仍然无效,但错误已附加到上面的行。然后,当您填写最后一行以使其有效并再次清空时,错误仍然显示在错误的行上。删除后续行只会使错误远离实际无效行,直到它们根本不出现在 table 上。
还有其他方法可以验证这些输入吗?
问题是您通常不会在内置 angular 指令中使用 {{}}(插值)。因此,将您的代码更改为:
<td ng-class="{ 'has-error' : vm.testForm['itemName' + $index].$invalid }">
<input type="text"
name="itemName{{$index}}"
class="form-control"
ng-model="item.name"
required />
<div class="help-block"
ng-show="vm.testForm['itemName' + $index].$invalid"
ng-messages="vm.testForm['itemName'+$index].$error">
<span ng-message="required">Name is required</span>
</div>
</td>
变化:
vm.testForm.itemName{{$index}}.$invalid
收件人:
vm.testForm['itemName' + $index].$invalid
做了一个plunker来验证:
https://plnkr.co/edit/vuQiH4D8qUY9jVoThnCy?p=preview
我有一系列 table 行,在 ng-repeat 中有各种输入,我正在尝试使用 angular 的内置表单验证来处理必填字段。一切正常,除了当我删除数组中支持 ng-repeat 的项目之一时。
这是我设置验证的方式
<td ng-class="{ 'has-error' : vm.testForm.itemName{{$index}}.$invalid }">
<input type="text"
name="itemName{{$index}}"
class="form-control"
ng-model="item.name"
required />
<div class="help-block"
ng-show="vm.testForm.itemName{{$index}}.$invalid"
ng-messages="vm.testForm['itemName'+$index].$error">
<span ng-message="required">Name is required</span>
</div>
</td>
Plunker 显示我的问题
https://plnkr.co/edit/Q1qyqlSG69EXR2lTrsHk
在 plunker 中,如果删除第一个 table 行,您会注意到虽然最后一行仍然无效,但错误已附加到上面的行。然后,当您填写最后一行以使其有效并再次清空时,错误仍然显示在错误的行上。删除后续行只会使错误远离实际无效行,直到它们根本不出现在 table 上。
还有其他方法可以验证这些输入吗?
问题是您通常不会在内置 angular 指令中使用 {{}}(插值)。因此,将您的代码更改为:
<td ng-class="{ 'has-error' : vm.testForm['itemName' + $index].$invalid }">
<input type="text"
name="itemName{{$index}}"
class="form-control"
ng-model="item.name"
required />
<div class="help-block"
ng-show="vm.testForm['itemName' + $index].$invalid"
ng-messages="vm.testForm['itemName'+$index].$error">
<span ng-message="required">Name is required</span>
</div>
</td>
变化:
vm.testForm.itemName{{$index}}.$invalid
收件人:
vm.testForm['itemName' + $index].$invalid
做了一个plunker来验证: https://plnkr.co/edit/vuQiH4D8qUY9jVoThnCy?p=preview