通常,使用表单和输入字段,表单控制器会发布到表单名称属性下的相关范围中。并且,NgModelController 在输入名称属性下发布。因此,对于带有 ngModel 指令的输入字段,可以像这样检索输入字段的 NgModelController$scope.myFormName.myInputFieldName
问题是如何为 ngRepeat 指令中的输入字段做同样的事情(获取 NgModelController)?
我想使用 $index 作为名称的一部分来命名输入字段,以便每个模板实例都是唯一命名的。这渲染OK,所以
<input name="foo_{{$index}}" ...
将具有 $index == 3 的实例呈现为
<input name="foo_3" ...
但是尝试通过已发布的名称获取 ngModelController 不起作用(未定义),例如:
$scope.myFormName.foo_3
显示此内容的 plunker 在这里:http ://plnkr.co/edit/jYDhZfgC3Ud0fXUuP7To?p=preview
它显示成功获取“普通”输入元素的 ngModelController 并调用 $setValidity,还显示无法获取 ngRepeat 指令内的输入元素的 ngModelController。
从下面的 plunker 复制了相关的代码部分:
<div ng-repeat="element in elements">
<div ng-class="{error: form['foo_{{$index}}'].$invalid}">
<input name="foo_{{$index}}" ng-model="element.a" type="number">
<span ng-show="form['foo_{{$index}}'].$error.bar">ngRepeat bar invalid</span>
</div>
</div>
{{form.foo_0.$setValidity('bar', false)}}