質問する
212 次
1 に答える
1
私が知っている Angular (1.2.x と 1.3.x) でこれを行う方法は 2 つあります。どちらも完璧ではありません。
- ソース配列をオブジェクト ソースとして扱う
- オプションを生成する
ng-repeat
したがって、次の VM を想定します。
$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
これが代替案を示すプランカーです
オフトピック:
ただし、典型的なケースでは、実際に選択されたオブジェクト、または場合によってはそのオブジェクトのプロパティが必要です。オブジェクトが格納されている配列のインデックスに依存している場合は、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 に答える