为什么我不能在AngularJs中双向绑定数组索引到模型?
Why can't I two-way bind array index to a model in AngularJs?
我试图做什么似乎是这样一个简单的事情:我有一个字符串值的数组,我想绑定到一个select
的option
s,并将所选值的索引绑定到一个变量。但无论是使用ng-options
还是常规options
与ng-repeat
似乎都不能完全工作。一旦开始选择值,后者就可以工作,但不绑定到页面加载时的值集。
下面是Codepen对这个问题的说明。http://codepen.io/modo_lv/pen/xGYQjM(点击"View Compiled"查看纯HTML和JavaScript)。注意,这两个下拉框一开始都是空的,尽管它们绑定的值已经设置好了。并且在第一个下拉列表中选择任何内容都会导致该值变为未设置
你不能绑定它,因为$index没有为ngOptions
定义,它只是ngRepeat
的事情。如果你想知道选项的索引,你可以用Array.prototype.indexOf方法计算它:
<select ng-model="testModel"
ng-options="labels.indexOf(label) as label for label in labels">
</select>
演示:http://codepen.io/anon/pen/MwBXBx
我有一个字符串值数组,我想将其绑定到select's选项,并将所选值的索引绑定到一个变量…
…无论是使用ng-options还是使用ng-repeat的常规选项似乎都不能完全工作。
ng-options不工作,因为你试图使用$index
与它(这只适用于ng-repeat
)。要使代码使用ng-option工作,您需要替换
ng-options="$index as label for label in labels"
ng-options="labels.indexOf(label) as label for label in labels"
其次,ng-repeat不起作用,因为您在ng-value
上使用$index
,但ng-model
中的值没有与之关联的索引。
为了使你的代码与ng-repeat
一起工作,你可以简单地在<option>
中使用ng-selected
,如下所示:
<option ng-repeat="label in labels" ng-selected = "{{label == testVal}}" ng-value="$index">
{{label}}
</option>
这是更新后的plunkr
- 使用knockout.js将数组绑定到视图模型
- Dojo将索引0处的数据从数组绑定到小部件
- 创建一个计算值数组,该数组绑定到AngularJS中的其他输入
- 空的数组绑定元素在页面加载时消失
- 反应:将数组绑定到动态添加的字段
- 在 c# 中将多维 JavaScript 数组绑定为方法参数
- 在表单提交时将日期的 JavaScript 数组绑定到页面的视图模型
- 将可观察数组绑定到 C# 列表
- 基于用户在UI中输入的数字创建动态数组(绑定到网格)
- 如何将一个简单的Javascript数组绑定到MVC3控制器操作方法
- KnockOut数组绑定到单个索引
- ng模型与2d数组绑定
- 使用Knockout.Js将数组绑定到表,并将数组的一个项绑定到另一个元素
- 在测试中无法将伪数组绑定到作用域变量
- 二维数组绑定问题
- 如何将javascript数组绑定到mvc4剃刀列表框
- 不能使用AJAX将数组绑定到列表
- 如何将数组绑定到ListView
- KnockoutJS:从数组绑定值
- ngOptions在AngularJS中从内部和外部数组绑定