【发布时间】:2015-10-30 01:43:00
【问题描述】:
我正在构建一个 Angular 表单,它需要在 ngRepeat 内重复表单元素。
<form name="form">
<div ng-repeat="x in [1,2,3,4]">
<input name="something_{{$index}}" ng-model="hi" required>
<div ng-messages="form.something_{{$index}}.$error">
<ng-message="required">This is required</ng-message>
</div>
</div>
<pre>{{form | json: 4}}</pre>
</form>
Angular 现在支持动态声明 input 名称,因此您不必执行以下操作:
<div ng-repeat="x in [1,2,3,4] ng-form="repeated-form"></div>
您可以在ngRepeat 中使用{{$index}} 来动态声明项目。但这似乎不适用于ngMessages,当我尝试将索引绑定到其中时会引发错误。
即这个:
<div ng-messages="form.something_{{$index}}.$error">
抛出这个:
Error: [$parse:syntax] Syntax Error: Token '{' is an unexpected token at column 16 of the expression [form.something_{{$index}}.$error] starting at [{{$index}}.$error].
如果 ng-messages 无法查看使用其 {{$index}} 声明的表单值,我们如何动态声明要查看的表单属性?
PLNKR:http://plnkr.co/edit/4oOasbtffTgKqmxcppUG?p=preview(检查控制台)
【问题讨论】:
-
你试过
ng-messages="form.something_$index.$error"- 只需删除{{ }} -
感谢您的回复。那将是真棒!但它没有正确插值。最终结果html是
<div ng-messages="form.something_$index.$error"> -
试试这个
<div ng-messages="form['something_'+$index].$error"> -
感谢您的帮助!不幸的是,结果是一样的! :-(
Syntax Error: Token '[' is not a valid identifier -
ngBind({{ }} 指令)以与 ngMessages 相同的优先级执行。这意味着 ngMessages 可能会在元素的 ngBind 之前处理(因此 ngMessages 执行代码仍会看到未转换的 {{expr}} 文本。
标签: javascript angularjs forms