unidades:03_servicios:01_servicios
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| unidades:03_servicios:01_servicios [2014/07/23 22:04] – [Usando servicios] admin | unidades:03_servicios:01_servicios [2014/08/29 21:08] (actual) – admin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== 3.1 Servicios ====== | ====== 3.1 Servicios ====== | ||
| - | Por ahora hemos visto 2 artefactos de AngularJS , los controladores y las directivas. En esta unidad vamos a ver otro conjunto de nuevos artefactos: | + | Por ahora hemos visto 2 artefactos de AngularJS , los controladores y las directivas. En esta unidad vamos a ver otro conjunto de nuevos artefactos: |
| - | * Constantes | + | |
| - | * Valores | + | Aunque hablamos de servicios |
| - | * Factorias | + | |
| - | * Servicios | + | * [[unidades: |
| - | * Proveedores | + | * [[unidades: |
| + | * [[unidades: | ||
| + | * [[unidades: | ||
| + | * [[unidades: | ||
| Estos 5 tipos corresponden a 5 métodos que existen en la clase " | Estos 5 tipos corresponden a 5 métodos que existen en la clase " | ||
| - | ===== ¿Que es un servicio? ===== | + | ===== ¿Qué |
| - | Es un objeto JavaScript que nos permite obtener información. Aparentemente nada nuevo que entender, sería por ejemplo un DAO en Java o un servicios de Java. Lo importante de ésto es que un servicio nunca ((Solo hay una excepción y es el servicio para crear ventanas de diálogo o modales)) interacciona con la propia página, | + | Es un objeto JavaScript que nos permite obtener información. Aparentemente nada nuevo que entender, sería por ejemplo un DAO en Java o un servicios de Java. Lo importante de ésto es que un servicio nunca ((Solo hay una excepción y es el servicio para crear ventanas de diálogo o modales)) interacciona con la propia página, |
| - | Ejemplos de serviciós | + | Ejemplos de servicios |
| - | * El servicio | + | * El servicio |
| * Un servicio que se conecta a un host que nos retorna el valor del Euribor. | * Un servicio que se conecta a un host que nos retorna el valor del Euribor. | ||
| - | * Un posible servicio de cálculo de Hipoteca que dado los datos de una hipoteca (Importe del préstamo, años, diferencial ,etc) nos calculara | + | * Un posible servicio de cálculo de Hipoteca que dados los datos de una hipoteca (Importe del préstamo, años, diferencial ,etc) nos calculara |
| * Un servicio que nos hiciera las operaciones de [[http:// | * Un servicio que nos hiciera las operaciones de [[http:// | ||
| * Un servicio que transformara los String con una fecha en un objeto Date. | * Un servicio que transformara los String con una fecha en un objeto Date. | ||
| - | * El servicio [[https:// | + | * El servicio [[https:// |
| * Etc. | * Etc. | ||
| + | <note tip> | ||
| + | Una característica importante de los servicios es que sólo hay una única instancia de ellos aunque los usemos más de una vez,es decir que son un [[http:// | ||
| + | </ | ||
| ===== Ventajas ===== | ===== Ventajas ===== | ||
| - | ¿Y que tiene ésto de especial? | + | ¿Y qué tiene ésto de especial? |
| Las ventajas son las siguientes: | Las ventajas son las siguientes: | ||
| Línea 34: | Línea 40: | ||
| ==== Facilitar el TDD ==== | ==== Facilitar el TDD ==== | ||
| - | Aunque en este curso no se trata el tema del [[http:// | + | Aunque en este curso no se trata el tema del [[http:// |
| Es decir, al ser el servicio un artefacto de Angular , podremos cambiarlo por una implementación vacía que facilita el TDD. | Es decir, al ser el servicio un artefacto de Angular , podremos cambiarlo por una implementación vacía que facilita el TDD. | ||
| ==== Permitir decorar los servicios ==== | ==== Permitir decorar los servicios ==== | ||
| - | Angular nos permite decorar los servicios. | + | Angular nos permite decorar los servicios. |
| ==== Facilitar las relaciones entre servicios ==== | ==== Facilitar las relaciones entre servicios ==== | ||
| Cuando la aplicación se vuelve compleja empiezan a depender unos servicios de otros. En los ejemplos de servicios que hemos visto en este tema, está el servicio de cálculo de hipoteca que dependería del servicio de obtención del euribor. | Cuando la aplicación se vuelve compleja empiezan a depender unos servicios de otros. En los ejemplos de servicios que hemos visto en este tema, está el servicio de cálculo de hipoteca que dependería del servicio de obtención del euribor. | ||
| - | Cuando la cosa se complica podría pasar que se dependiera de un servicio que aun no ha sido inicializado. | + | Cuando la cosa se complica podría pasar que se dependiera de un servicio que aún no ha sido inicializado. |
| ==== Modificar las implementaciones ==== | ==== Modificar las implementaciones ==== | ||
| Línea 51: | Línea 57: | ||
| En nuestro ejemplo de servicio de obtención del Euribor se podría haber creado un módulo llamado " | En nuestro ejemplo de servicio de obtención del Euribor se podría haber creado un módulo llamado " | ||
| - | Cambiar de un servicio a otro sería tan sencillo como cambiar en el módulo de nuestra aplicación del módulo " | + | Cambiar de un servicio a otro sería tan sencillo como cambiar en el módulo de nuestra aplicación del módulo " |
| ===== Usando servicios ===== | ===== Usando servicios ===== | ||
| - | La primera característica de los servicios es que tiene un nombre (al igual que los controladores) y como ya dijimos en [[unidades: | + | La primera característica de los servicios es que tienen |
| + | |||
| + | |||
| + | Un servicio sencillo de AngularJS es el servicio de [[https:// | ||
| + | |||
| + | |||
| + | Continuando ahora con nuestro ejemplo del seguro médico vamos a añadir un mensaje de log cuando se configura el '' | ||
| + | |||
| + | |||
| + | ¿Cómo obtenemos una instancia del servicio de '' | ||
| + | |||
| + | <sxh js; | ||
| + | var app=angular.module(" | ||
| + | |||
| + | app.controller(" | ||
| + | $scope.seguro={ | ||
| + | nif:"", | ||
| + | nombre:"", | ||
| + | ape1:"", | ||
| + | edad: | ||
| + | sexo:"", | ||
| + | casado: | ||
| + | numHijos: | ||
| + | embarazada: | ||
| + | coberturas: { | ||
| + | oftalmologia: | ||
| + | dental: | ||
| + | fecundacionInVitro: | ||
| + | }, | ||
| + | enfermedades: | ||
| + | corazon: | ||
| + | estomacal: | ||
| + | rinyones: | ||
| + | alergia: | ||
| + | nombreAlergia:"" | ||
| + | }, | ||
| + | fechaCreacion: | ||
| + | } | ||
| + | |||
| + | $log.debug(" | ||
| + | |||
| + | }); | ||
| + | </ | ||
| + | |||
| + | * Línea 3: Vemos que la función del controlador ahora tiene 2 parámetros, | ||
| + | * Línea 28: Usamos el objeto '' | ||
| + | |||
| + | Si mostramos la consola de chrome (CTRL+SHIFT+J) veremos el mensaje de " | ||
| + | |||
| + | Es decir que en vez de pedir nosotros las instancias de los servicios, se incluyen como parámetros de nuestra función del controlador y cuando AngularJS llame al controlador nos inyectará las instancias de los servicios que hemos solicitado. | ||
| + | |||
| + | ==== Minimizando el JavaScript ==== | ||
| + | Para mejorar el rendimiento u ofuscar el código javaScript se suele recurrir a herramientas que minimizan el código JavaScript. Estas herramientas entre otras cosas renombran las variables. El problema es que si se renombra la variable del servicio del '' | ||
| + | |||
| + | Es decir, al minimizar nuestra función se queda de la siguiente forma (Hemos omitido aquí el cuerpo de la función para mejorar la legibilidad): | ||
| + | |||
| + | <sxh js> | ||
| + | app.controller(" | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Tras minimizar el código, los parámetros se llamarían '' | ||
| + | |||
| + | Los creadores de AngularJS conocedores de este problema han creado una solución. En vez de pasar la función , pasamos un array en el que los n primeros elementos son '' | ||
| + | |||
| + | Veamos ahora cómo debería ser nuestro código: | ||
| + | |||
| + | <sxh js> | ||
| + | app.controller(" | ||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | Vemos cómo se pasa un array con 3 elementos. El primero de ellos es un String con el texto '' | ||
| + | |||
| + | **Nótese que ahora hay que cerrar el corchete del array al acabar la función** | ||
| + | |||
| + | Si ahora minimizáramos el código quedaría de la siguiente forma: | ||
| + | |||
| + | <sxh js> | ||
| + | app.controller(" | ||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | Los parámetros al minimizarlos se llaman '' | ||
| + | |||
| + | Es decir que el texto de cada elemento del array ((Menos el último)) se corresponde con el nombre de lo que queremos inyectar en la función del controlador. | ||
| + | |||
| + | <note warning> | ||
| + | Al inyectar objetos en el controlador (o cualquier otra función en la que AngularJS inyecte valores , recuerda siempre pasar un array con el nombre de lo que hay que inyectar y como último parámetro la función , en vez de pasar únicamente la función. | ||
| + | |||
| + | Es necesario hacerlo siempre así ya que nunca sabes si alguien va a querer minimizar tu código JavaScript. | ||
| + | </ | ||
| + | |||
| + | Finalmente el ejemplo quedaría de la siguiente forma: | ||
| + | |||
| + | <sxh js; | ||
| + | var app=angular.module(" | ||
| + | |||
| + | app.controller(" | ||
| + | $scope.seguro={ | ||
| + | nif:"", | ||
| + | nombre:"", | ||
| + | ape1:"", | ||
| + | edad: | ||
| + | sexo:"", | ||
| + | casado: | ||
| + | numHijos: | ||
| + | embarazada: | ||
| + | coberturas: { | ||
| + | oftalmologia: | ||
| + | dental: | ||
| + | fecundacionInVitro: | ||
| + | }, | ||
| + | enfermedades: | ||
| + | corazon: | ||
| + | estomacal: | ||
| + | rinyones: | ||
| + | alergia: | ||
| + | nombreAlergia:"" | ||
| + | }, | ||
| + | fechaCreacion: | ||
| + | } | ||
| + | |||
| + | $log.debug(" | ||
| + | |||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | * Línea 3: Ahora vemos que se pasa el array con el nombre de las instancias a inyectar y como último parámetro la propia función. | ||
| + | * Línea 30: Tambien hay que cerrar el array con el '' | ||
| + | <note tip> | ||
| + | Recuerda cerrar el array con " | ||
| - | Un sencillo servicio de AngularJS es el servicio de [[https:// | + | Es decir que acabará siempre |
| + | </ | ||
| - | Continuemos ahora con nuestro ejemplo del seguro médico y añadamos un mensaje de log cuando se configura el '' | ||
| + | {{url> | ||
| + | ===== Nombrando los servicios ===== | ||
| + | Los nombres de los servicios deben seguir la misma nomenclatura que los nombre de las variables. Es decir que la primera palabra debe ser en minúscula y el resto de palabras deben empezar en mayúscula (ver [[http:// | ||
| + | ¿Por qué deben seguir la misma norma que las variables? Porque cuando inyectamos un servicio lo hacemos sobre una variable que se llama como el servicio por lo tanto el servicio se debe llamar como las variables. | ||
| - | ===== Nombres | + | ==== Servicios propios |
| - | Una cosa que llama la atención es porque en angular los servicios y otros artefactos empiezan sus nombres por " | + | En angular los servicios y otros artefactos empiezan |
| - | También hay nombres en angular que empiezan por " | + | También hay nombres en angular que empiezan por " |
| + | ===== Referencias ===== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
unidades/03_servicios/01_servicios.1406145897.txt.gz · Última modificación: por admin
