Veja ngOptions
ngOptions (opcional) - { comprehension_expression=
} - em uma das seguintes formas:
Para fontes de dados da matriz :
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
Para fontes de dados do objeto:
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
No seu caso, deve ser
array = [{ "value": 1, "text": "1st" }, { "value": 2, "text": "2nd" }];
<select ng-options="obj.value as obj.text for obj in array"></select>
Atualizar
Com as atualizações no AngularJS, agora é possível definir o valor real para o value
atributo do select
elemento com track by
expressão.
<select ng-options="obj.text for obj in array track by obj.value">
</select>
Como se lembrar dessas coisas feias
Para todas as pessoas que estão tendo dificuldades para se lembrar desta forma de sintaxe: Concordo que essa não é a sintaxe mais fácil ou bonita. Essa sintaxe é uma espécie de versão estendida das compreensões de lista do Python e do conhecimento que me ajuda a lembrar a sintaxe com muita facilidade. É algo como isto:
Código 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']
Esta é realmente a mesma sintaxe que a primeira listada acima. No entanto, <select>
geralmente precisamos diferenciar entre o valor real no código e o texto mostrado (o rótulo) em um <select>
elemento.
Como, precisamos person.id
no código, mas não queremos mostrar id
ao usuário; queremos mostrar o nome dele. Da mesma forma, não estamos interessados no person.name
código. Aí vem a as
palavra-chave para rotular as coisas. Então fica assim:
person.id as person.name for person in people
Ou, em vez de person.id
precisarmos da própria person
instância / referência. Ver abaixo:
person as person.name for person in people
Para objetos JavaScript, o mesmo método também se aplica. Lembre-se de que os itens no objeto são desconstruídos com (key, value)
pares.