Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

unidades:04_masdirectivas:05_ngoptions [2014/08/01 11:29]
admin [4.5 ng-options]
unidades:04_masdirectivas:05_ngoptions [2014/11/07 20:45] (actual)
admin
Línea 1: Línea 1:
 ====== 4.5 ng-options ====== ====== 4.5 ng-options ======
-En la primera unidad ya vimos como usar el tag ''<​select>''​ mediante la directiva ''​ng-model''​. Lo que vamos a ver ahora es como rellenar todas sus opciones automáticamente a partir de los datos del ''​$scope''​. Es algo parecido al tag ''​ng-repeat''​ que acabamos de ver y para ello se utiliza la directiva ''​ng-options''​+En la primera unidad ya vimos cómo usar el tag ''<​select>''​ mediante la directiva ''​ng-model''​. Lo que vamos a ver ahora es cómo rellenar todas sus opciones automáticamente a partir de los datos del ''​$scope''​. Es algo parecido al tag ''​ng-repeat''​ que acabamos de ver y para ello se utiliza la directiva ''​ng-options'' ​((Estrictamente hablando ''​ng-options''​ no es una directiva sino que es simplemente un atributo de la directiva ''​select''​ asociada al tag ''<​select>''​))
  
  
Línea 36: Línea 36:
  
   * Línea 2 : Hemos definido la variable ''​provincias''​ con el array de provincias a mostrar en el tag ''<​select>''​.   * Línea 2 : Hemos definido la variable ''​provincias''​ con el array de provincias a mostrar en el tag ''<​select>''​.
-  * Línea 25: Propiedad ''​miProvinciaSeleccionada''​ asociada al ''<​select>''​ mediante ''​ng-model''​ y que es donde se guardará el valor seleccionado en el ''<​select>''​. Los más importante es que contendrá el **objeto** correspondiente a la provincia que se ha seleccionado y no solo su ''​idProvincia''​.+  * Línea 25: Propiedad ''​miProvinciaSeleccionada''​ asociada al ''<​select>''​ mediante ''​ng-model''​ y que es donde se guardará el valor seleccionado en el ''<​select>''​. Los más importante es que contendrá el **objeto** correspondiente a la provincia que se ha seleccionado y no sólo su ''​idProvincia''​.
  
-Ahora que ya tenemos el modelo, pasemos a ver como usar la directiva ''​ng-options''​.La forma es un poco compleja:+Ahora que ya tenemos el modelo, pasemos a ver cómo usar la directiva ''​ng-options''​.La forma es un poco compleja:
  
 "//​valor//​ **as** //​etiqueta//​ **for** //item// **in** //items// track by //​claveunica//"​ "//​valor//​ **as** //​etiqueta//​ **for** //item// **in** //items// track by //​claveunica//"​
Línea 45: Línea 45:
   * //​items//:​La propiedad del ''​$scope''​ que contiene el array de elementos a mostrar en el ''<​select>''​.   * //​items//:​La propiedad del ''​$scope''​ que contiene el array de elementos a mostrar en el ''<​select>''​.
   * //item//:Es la declaración de una variable que contendrá cada uno de los elementos de //items//. Este valor puede ser cualquier texto que decidamos.   * //item//:Es la declaración de una variable que contendrá cada uno de los elementos de //items//. Este valor puede ser cualquier texto que decidamos.
-  * //valor//: Una expresión que use la variable //item// que será el valor que se asignará al modelo del ''<​select>''​. ​Es nuestro caso será el objeto entero.+  * //valor//: Una expresión que use la variable //item// que será el valor que se asignará al modelo del ''<​select>''​. ​En nuestro caso será el objeto entero.
   * //​etiqueta//:​ Una expresión que use la variable //item// que será la etiqueta que se mostrará en cada uno de los ''<​option>''​.   * //​etiqueta//:​ Una expresión que use la variable //item// que será la etiqueta que se mostrará en cada uno de los ''<​option>''​.
-  * //​claveunica//:​ La propiedad que es clave única+  * //​claveunica//:​ La propiedad que es clave única.
  
 En nuestro ejemplo quedará de la siguiente forma: En nuestro ejemplo quedará de la siguiente forma:
Línea 58: Línea 58:
  
   * La lista de todos los valores se obtiene de ''​provincias''​. ​   * La lista de todos los valores se obtiene de ''​provincias''​. ​
-  * Cada una de los elementos los referenciamos como ''​provincia''​.+  * Cada uno de los elementos los referenciamos como ''​provincia''​.
   * La etiqueta de cada uno de los ''<​option>''​ es ''​provincia.nombre''​.   * La etiqueta de cada uno de los ''<​option>''​ es ''​provincia.nombre''​.
   * El valor que se asignará a la variable ''​provincia''​ del ''​ng-model''​ es la propia variable ''​provincia''​ de cada uno de los elementos.   * El valor que se asignará a la variable ''​provincia''​ del ''​ng-model''​ es la propia variable ''​provincia''​ de cada uno de los elementos.
   * La clave única es ''​provincia.idProvincia''​   * La clave única es ''​provincia.idProvincia''​
  
-Otra forma de ver como funciona la directiva ''​ng-options'':​+Otra forma de ver cómo funciona la directiva ''​ng-options'':​
  
 "//​provincia//​ **as** //​provincia.nombre//​ **for** //​provincia//​ **in** //​provincias//"​ "//​provincia//​ **as** //​provincia.nombre//​ **for** //​provincia//​ **in** //​provincias//"​
Línea 77: Línea 77:
  
 <note important>​ <note important>​
-Hay que fijarse en la potencia de AngularJS. ​el ''<​select>''​ no lo hemos asociado a un simple valor numérico como ''​idProvincia''​ sino un el objeto completo ''​provincia''​. ​+Hay que fijarse en la potencia de AngularJS. ​El ''<​select>''​ no lo hemos asociado a un simple valor numérico como ''​idProvincia''​ sino con el objeto completo ''​provincia''​. ​
  
 Aunque nada impide asociarlo al ''​idProvincia''​. Habría que modificar la directiva de la siguiente forma: Aunque nada impide asociarlo al ''​idProvincia''​. Habría que modificar la directiva de la siguiente forma:
Línea 85: Línea 85:
  
 <​note>​ <​note>​
-En la línea 2 del HTML podemos ver como se ha añadido un ''<​option>''​ para el caso del valor ''​null''​. Es recomendable añadir esta opción, ya que sino lo hará automáticamente AngularJS pero al seleccionar una provincia desaparecerá la opción vacía, lo que hace que sea muy extraño para el usuario.+En la línea 2 del HTML podemos ver cómo se ha añadido un ''<​option>''​ para el caso del valor ''​null''​. Es recomendable añadir esta opción, ya que si no lo hará automáticamente AngularJS pero al seleccionar una provincia desaparecerá la opción vacía, lo que hace que sea muy extraño para el usuario.
 </​note>​ </​note>​
  
Línea 100: Línea 100:
  
 Veremos que no está seleccionada la provincia de Alicante. ​ Veremos que no está seleccionada la provincia de Alicante. ​
-¿Porque ​no está seleccionada la provincia de alicante? Porque realmente no hemos seleccionado ningún elemento del array. Se debería haber puesto:+¿Por qué no está seleccionada la provincia de Alicante? Porque realmente no hemos seleccionado ningún elemento del array. Se debería haber puesto:
  
 <sxh js> <sxh js>
Línea 108: Línea 108:
 Puesto que ''​$scope.provincias[1]''​ no es igual a ''​{ idProvincia:​3,​ nombre:"​Alicante"​}''​ aunque tengan los mismo valores. Realmente son 2 objetos distintos ya que apuntan a zonas de memoria distintas. Puesto que ''​$scope.provincias[1]''​ no es igual a ''​{ idProvincia:​3,​ nombre:"​Alicante"​}''​ aunque tengan los mismo valores. Realmente son 2 objetos distintos ya que apuntan a zonas de memoria distintas.
  
-Añadiendo a ''​ng-options''​ el texto ''​track by provincia.idProvincia''​ le decimos a AngularJS que compare objeto por la propiedad ''​idProvincia'',​ por lo que el objeto ''​$scope.provincias[1]''​ ya es igual a ''​{ idProvincia:​3,​ nombre:"​Alicante"​}''​ +Añadiendo a ''​ng-options''​ el texto ''​track by provincia.idProvincia''​ le decimos a AngularJS que compare ​cada objeto por la propiedad ''​idProvincia'',​ por lo que el objeto ''​$scope.provincias[1]''​ ya es igual a ''​{ idProvincia:​3,​ nombre:"​Alicante"​}'' ​ya que el ''​idProvincia''​ de ''​$scope.provincias[1]''​ es 3
  
 ¿Y es realmente útil? ¿Y es realmente útil?
 Si , cuando tengamos el array y a la variable ''​$scope.miProvinciaSeleccionada''​ se le asigne un objeto desde el servidor querremos que lo seleccione aunque no sea el mismo objeto. Si , cuando tengamos el array y a la variable ''​$scope.miProvinciaSeleccionada''​ se le asigne un objeto desde el servidor querremos que lo seleccione aunque no sea el mismo objeto.
 +
 +Si el valor es un escalar como un String o un número no es necesario poner el ''​track by''​ si no es por temas de optimización.
  
 </​note>​ </​note>​
unidades/04_masdirectivas/05_ngoptions.1406885344.txt.gz · Última modificación: 2014/08/01 11:29 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0