Ver ngOpciones
ngOptions (opcional) - { comprehension_expression=
} - en una de las siguientes formas:
Para orígenes de datos de 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 orígenes de datos de 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
En su caso, debería ser
array = [{ "value": 1, "text": "1st" }, { "value": 2, "text": "2nd" }];
<select ng-options="obj.value as obj.text for obj in array"></select>
Actualizar
Con las actualizaciones en AngularJS, ahora es posible establecer el valor real para el value
atributo del select
elemento con track by
expresión.
<select ng-options="obj.text for obj in array track by obj.value">
</select>
Cómo recordar estas cosas feas
Para todas las personas que están teniendo dificultades para recordar esta forma de sintaxis: Estoy de acuerdo en que esta no es la sintaxis más fácil o hermosa. Esta sintaxis es una especie de versión extendida de las comprensiones de la lista de Python y su conocimiento me ayuda a recordar la sintaxis muy fácilmente. Es algo como esto:
Código de 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 es en realidad la misma sintaxis que la primera listada anteriormente. Sin embargo, <select>
generalmente necesitamos diferenciar entre el valor real en el código y el texto que se muestra (la etiqueta) en un <select>
elemento.
Como, necesitamos person.id
en el código, pero no queremos mostrarlo id
al usuario; Queremos mostrar su nombre. Del mismo modo, no estamos interesados person.name
en el código. Llega la as
palabra clave para etiquetar cosas. Entonces se vuelve así:
person.id as person.name for person in people
O, en lugar de person.id
eso, podríamos necesitar la person
instancia / referencia en sí. Vea abajo:
person as person.name for person in people
Para los objetos JavaScript, también se aplica el mismo método. Solo recuerda que los elementos del objeto se deconstruyen con (key, value)
pares.