unidades:04_masdirectivas:06_ngif
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| unidades:04_masdirectivas:06_ngif [2014/07/31 18:23] – creado admin | unidades:04_masdirectivas:06_ngif [2014/08/29 22:58] (actual) – admin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== 4.6 ng-if ====== | ====== 4.6 ng-if ====== | ||
| - | La directiva '' | + | La directiva '' |
| - | Esta directiva no debería tener mucho que explicar pero realmente tiene un detalle que la hace muy importante. Crea un nuevo '' | + | Esta directiva no debería tener mucho que explicar pero realmente tiene un detalle que la hace muy importante. Crea un nuevo '' |
| Vamos a ver primeramente un ejemplo y comprobaremos que hay algo que funciona mal. | Vamos a ver primeramente un ejemplo y comprobaremos que hay algo que funciona mal. | ||
| - | En el ejemplo prueba a escribir algo en el nombre y en el apellido. | + | En el ejemplo prueba a escribir algo en el nombre y en el apellido. |
| {{url> | {{url> | ||
| + | ¿Qué hay distinto en los 2 ejemplos? Simplemente que en el modelo del apellido hay un punto y en el del nombre, no. | ||
| + | <sxh html; | ||
| + | < | ||
| + | <html ng-app=" | ||
| + | |||
| + | < | ||
| + | <script src="// | ||
| + | <script src=" | ||
| + | </ | ||
| + | |||
| + | <body ng-controller=" | ||
| + | |||
| + | <input type=" | ||
| + | <br> | ||
| + | <div ng-if=" | ||
| + | Nombre: <input ng-model=" | ||
| + | <br> | ||
| + | El valor de " | ||
| + | </ | ||
| + | El valor de " | ||
| + | |||
| + | <hr> | ||
| + | |||
| + | <input type=" | ||
| + | <br> | ||
| + | <div ng-if=" | ||
| + | Apellido: <input ng-model=" | ||
| + | <br> | ||
| + | El valor de " | ||
| + | </ | ||
| + | El valor de " | ||
| + | |||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | * Línea 16: La expresión '' | ||
| + | * Línea 18: La expresión '' | ||
| + | |||
| + | * Línea 27: La expresión '' | ||
| + | * Línea 29: La expresión '' | ||
| + | |||
| + | <sxh js; | ||
| + | var app = angular.module(" | ||
| + | | ||
| + | app.controller(" | ||
| + | $scope.nombre=" | ||
| + | $scope.showNombre=true; | ||
| + | | ||
| + | $scope.modelo={ | ||
| + | apellido:" | ||
| + | showApellido: | ||
| + | } | ||
| + | |||
| + | }); | ||
| + | </ | ||
| + | |||
| + | * Linea 4: La propiedad '' | ||
| + | * Línea 8: La propiedad '' | ||
| + | |||
| + | ¿Recuerdas la advertencia del tema [[unidades: | ||
| + | |||
| + | **//Si el valor de tu directiva ng-model no incluye un punto es que está mal//** | ||
| + | |||
| + | Ahora vamos a explicar del motivo de esta advertancia. | ||
| + | |||
| + | Voy a volver a recordar que dentro de una directiva '' | ||
| + | ===== Herencia de $scope ===== | ||
| + | Lo importante ahora es comprender cómo se ha hecho dicha herencia. Es algo tan //chapuza// que lo que hace es copiar simplemente el valor de todas las propiedades. El problema es que si una propiedad **NO** es un puntero a un objeto resulta que tendremos 2 propiedades distintas que tienen ahora 2 valores independientes. | ||
| + | |||
| + | <uml> | ||
| + | object scopeControlador | ||
| + | object scopeIf | ||
| + | |||
| + | scopeControlador : nombre=" | ||
| + | scopeControlador : showNombre=true | ||
| + | | ||
| + | scopeIf : nombre=" | ||
| + | scopeIf : showNombre=true | ||
| + | |||
| + | object modelo | ||
| + | |||
| + | modelo : apellido = " | ||
| + | modelo : showApellido = true | ||
| + | |||
| + | scopeControlador --> modelo : modelo | ||
| + | scopeIf --> modelo : modelo | ||
| + | </ | ||
| + | |||
| + | Fíjate en el diagrama UML de objetos que se ha creado. Ahora cada '' | ||
| + | |||
| + | Es decir que la propiedad '' | ||
| + | |||
| + | Sin embargo la propiedad '' | ||
| + | |||
| + | De todo ésto se deduce que siempre deberían estar nuestras propiedades dentro de objetos y por eso la frase: | ||
| + | |||
| + | **//Si el valor de tu directiva ng-model no incluye un punto es que está mal//** | ||
| + | |||
| + | Ya que tener un punto significa que los datos están dentro de un objeto. | ||
| + | |||
| + | <note warning> | ||
| + | Espero que todo ésto se haya comprendido porque es uno de los mayores motivos de errores en AngularJS. | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | Realmente el modelo de objetos que hemos presentado en el diagrama UML ahí no se corresponde exactamente con la realidad ya que no se hace copia del valor en el '' | ||
| + | |||
| + | Ésto último implica que si primero se hace un cambio en la propiedad '' | ||
| + | |||
| + | Cambia el ejemplo de esta forma y mira a ver lo que ocurre cuando primero cambias un input u otro del nombre. | ||
| + | |||
| + | <sxh html; | ||
| + | <input type=" | ||
| + | <br> | ||
| + | Nombre: <input ng-model=" | ||
| + | <div ng-if=" | ||
| + | Nombre: <input ng-model=" | ||
| + | <br> | ||
| + | El valor de " | ||
| + | </ | ||
| + | El valor de " | ||
| + | |||
| + | </ | ||
| + | Añade la línea 3 al ejemplo y mira lo que ocurre. | ||
| + | </ | ||
| + | |||
| + | ===== Referencias ===== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
unidades/04_masdirectivas/06_ngif.1406823809.txt.gz · Última modificación: por admin
