ngOptionsを参照してください
ngOptions(オプション) – { comprehension_expression=
} –次のいずれかの形式:
配列データソースの場合:
label for value in array
select as label for value in array
label group by group for value in array
select as label group by group for value in array track by trackexpr
オブジェクトデータソースの場合:
label for (key , value) in object
select as label for (key , value) in object
label group by group for (key, value) in object
select as label group by group for (key, value) in object
あなたの場合、それは
array = [{ "value": 1, "text": "1st" }, { "value": 2, "text": "2nd" }];
<select ng-options="obj.value as obj.text for obj in array"></select>
更新
AngularJSの更新により、式value
をselect
持つ要素の属性に実際の値を設定できるようになりましたtrack by
。
<select ng-options="obj.text for obj in array track by obj.value">
</select>
この醜いものを覚える方法
この構文形式を覚えるのに苦労しているすべての人に:これが最も簡単で美しい構文ではないことに同意します。この構文は、Pythonのリスト内包表記の拡張バージョンの一種であり、構文を簡単に思い出すのに役立ちます。それは次のようなものです:
Pythonコード:
my_list = [x**2 for x in [1, 2, 3, 4, 5]]
> [1, 4, 9, 16, 25]
# Let people to be a list of person instances
my_list2 = [person.name for person in people]
> my_list2 = ['Alice', 'Bob']
これは実際には上記の最初の構文と同じです。ただし、<select>
通常、コード内の実際の値と<select>
要素内に表示されるテキスト(ラベル)を区別する必要があります。
同様person.id
に、コードに必要ですid
が、ユーザーにを表示したくありません。名前を表示します。同様person.name
に、コードのには興味がありません。as
ラベルを付けるキーワードがあります。したがって、次のようになります。
person.id as person.name for person in people
または、代わりにインスタンス/参照自体person.id
が必要になるperson
場合があります。下記参照:
person as person.name for person in people
JavaScriptオブジェクトの場合も、同じメソッドが適用されます。オブジェクトのアイテムは(key, value)
ペアで分解されることを覚えておいてください。