unidades:03_servicios:07_service
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| unidades:03_servicios:07_service [2014/07/25 16:05] – creado admin | unidades:03_servicios:07_service [2014/08/29 21:48] (actual) – admin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== 3.7 service ====== | ====== 3.7 service ====== | ||
| + | Hemos visto por ahora 2 tipos de servicio , las '' | ||
| + | Lo veremos mas claro con el siguiente ejemplo: | ||
| + | <sxh js; | ||
| + | var app=angular.module(" | ||
| + | |||
| + | function Rectangulo() { | ||
| + | this.ancho=0; | ||
| + | this.alto=0; | ||
| + | |||
| + | this.setAncho=function(ancho) { | ||
| + | this.ancho=ancho; | ||
| + | } | ||
| + | | ||
| + | this.setAlto=function(alto) { | ||
| + | this.alto=alto; | ||
| + | } | ||
| + | | ||
| + | this.getArea=function() { | ||
| + | return this.ancho * this.alto; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | app.service(" | ||
| + | |||
| + | |||
| + | app.controller(" | ||
| + | rectangulo.setAncho(3); | ||
| + | rectangulo.setAlto(6); | ||
| + | | ||
| + | $scope.area=rectangulo.getArea(); | ||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | * Línea 3: Aquí hemos definido la función JavaScript con el constructor de nuestra clase llamada " | ||
| + | * Línea 20: Llamamos al método '' | ||
| + | |||
| + | ===== Inyectando el constructor ===== | ||
| + | Una funcionalidad que permite AngularJS es que le podamos inyectar servicios en el propio constructor. | ||
| + | |||
| + | En el ejemplo anterior veíamos que el ancho y alto inicial era 0 , pero es un problema que los valores iniciales están //grabados a fuego// en el interior de la clase. Es mucho mas interesante que se puedan incluir en el constructor para que podamos elegir los que queramos. | ||
| + | |||
| + | Así que la clase quedará de la siguiente forma: | ||
| + | <sxh js; highlight: [1, | ||
| + | function Rectangulo(tamanyoInicial) { | ||
| + | this.ancho=tamanyoInicial.ancho; | ||
| + | this.alto=tamanyoInicial.alto; | ||
| + | | ||
| + | this.setAncho=function(ancho) { | ||
| + | this.ancho=ancho; | ||
| + | } | ||
| + | | ||
| + | this.setAlto=function(alto) { | ||
| + | this.alto=alto; | ||
| + | } | ||
| + | | ||
| + | this.getArea=function() { | ||
| + | return this.ancho * this.alto; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | * Línea 1: Ahora el constructor acepta como parámetro un objeto con las propiedades '' | ||
| + | * Línea 2: Se asigna como ancho inicial el valor de la propiedad '' | ||
| + | * Línea 3: Se asigna como alto inicial el valor de la propiedad '' | ||
| + | |||
| + | Lo siguiente es hacer que haya un servicio '' | ||
| + | <sxh js> | ||
| + | app.value(" | ||
| + | ancho:2, | ||
| + | alto:3 | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Y ahora nos queda inyectar el '' | ||
| + | <sxh js> | ||
| + | app.service(" | ||
| + | </ | ||
| + | Vemos que junto al nombre del constructor que es '' | ||
| + | |||
| + | El ejemplo completo quedaría de la siguiente forma: | ||
| + | <sxh js> | ||
| + | var app=angular.module(" | ||
| + | |||
| + | app.value(" | ||
| + | ancho:2, | ||
| + | alto:3 | ||
| + | }); | ||
| + | |||
| + | function Rectangulo(tamanyoInicial) { | ||
| + | this.ancho=tamanyoInicial.ancho; | ||
| + | this.alto=tamanyoInicial.alto; | ||
| + | | ||
| + | this.setAncho=function(ancho) { | ||
| + | this.ancho=ancho; | ||
| + | } | ||
| + | | ||
| + | this.setAlto=function(alto) { | ||
| + | this.alto=alto; | ||
| + | } | ||
| + | | ||
| + | this.getArea=function() { | ||
| + | return this.ancho * this.alto; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | app.service(" | ||
| + | |||
| + | |||
| + | app.controller(" | ||
| + | $scope.area=rectangulo.getArea(); | ||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | Hay que hacer notar que el nombre del '' | ||
| + | |||
| + | Si no hubiéramos usado el array sí que se deberían de haber llamado igual , por lo que éste es un motivo más para usar siempre el array. | ||
| + | </ | ||
| + | |||
| + | ===== Service vs value ===== | ||
| + | Ahora, ¿qué hemos ganado usando un '' | ||
| + | |||
| + | El ejemplo inicial se podría haber hecho como un '' | ||
| + | |||
| + | <sxh js; | ||
| + | var app=angular.module(" | ||
| + | |||
| + | function Rectangulo() { | ||
| + | |||
| + | this.setAncho=function(ancho) { | ||
| + | this.ancho=ancho; | ||
| + | } | ||
| + | | ||
| + | this.setAlto=function(alto) { | ||
| + | this.alto=alto; | ||
| + | } | ||
| + | | ||
| + | this.getArea=function() { | ||
| + | return this.ancho * this.alto; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | app.value(" | ||
| + | |||
| + | |||
| + | app.controller(" | ||
| + | rectangulo.setAncho(3); | ||
| + | rectangulo.setAlto(6); | ||
| + | | ||
| + | $scope.area=rectangulo.getArea(); | ||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | * Línea 18: Le pasamos directamente el objeto de la clase en vez de que internamente sea AngularJS el que cree el objeto. | ||
| + | |||
| + | Realmente no hay mucha diferencia ya que como veremos mas adelante, tanto los [[unidades: | ||
| + | |||
| + | Pero aun así, yo veo una ventaja de un '' | ||
| + | |||
| + | Esto que puede parecer poca cosa, podría implicar gran gasto de recursos en grandes aplicaciones en las que hay gran cantidad de servicios y también debemos añadir todos los servicios que crean las librerías de terceros que usemos. | ||
| + | |||
| + | <note tip> | ||
| + | Es preferible usar un '' | ||
| + | * Nos podemos ahorrar la creación de la instancia o al menos retrasarla hasta que sea necesaria | ||
| + | * Permite inyectar dependencias en el constructor | ||
| + | </ | ||
| + | |||
| + | ===== Ejemplo ===== | ||
| + | {{url> | ||
| + | ===== Referencias ===== | ||
| + | * [[https:// | ||
unidades/03_servicios/07_service.1406297153.txt.gz · Última modificación: por admin
