问问题
212 次
1 回答
1
我知道有两种使用 Angular(1.2.x 和 1.3.x)的方法 - 没有一种方法是完美的:
- 将源数组视为对象源
- 生成选项
ng-repeat
因此,假设以下虚拟机:
$scope.items = [{id: "a", n: "b"}, ...]
替代#1
<select ng-model="selectedIndexStr"
ng-options="idx as item.n for (idx, item) in items">
缺点:
selectedIndexStr
将是一个字符串,而不是整数,因为idx
它被视为对象的属性键,而不是数组的索引。这可能适合您,也可能不适合您,但是,为了说明,如果您想将 设置ng-model
为默认值,它必须是$scope.selectedIndexStr = "0"
(注意""
)- 该顺序将基于索引值的字符串比较。因此,如果您有超过 10 件商品,则订单为:
"0", "1", "10", "11", "2", "3", ...
替代#2
<select ng-model="selectedIndex">
<option ng-repeat="item in items" value="{{$index}}"
ng-selected="selectedIndex === $index">{{item.n}}</option>
</select>
这里的缺点是它更冗长,因为它不使用ng-options
这是一个显示替代方案的plunker
无关:
但是,在典型情况下,人们会想要实际选择的对象,或者有时需要该对象的属性。如果您依赖存储对象的数组的索引,那么也许您应该重新评估您的 ViewModel 设计。
因此,以下内容对我来说最有意义:
<select ng-model="selectedItem" ng-options="item as item.n for item in items">
或者,
<select ng-model="selectedItemId" ng-options="item.id as item.n for item in items">
于 2015-02-05T08:13:51.497 回答