unidades:03_servicios:07_service
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:07_service [2014/07/29 13:23] – [Referencias] admin | unidades:03_servicios:07_service [2014/08/29 21:48] (actual) – admin | ||
|---|---|---|---|
| Línea 3: | Línea 3: | ||
| Lo veremos mas claro con el siguiente ejemplo: | Lo veremos mas claro con el siguiente ejemplo: | ||
| - | <sxh js; | + | <sxh js; |
| var app=angular.module(" | var app=angular.module(" | ||
| - | function | + | function |
| + | this.ancho=0; | ||
| + | this.alto=0; | ||
| this.setAncho=function(ancho) { | this.setAncho=function(ancho) { | ||
| Línea 21: | Línea 23: | ||
| } | } | ||
| - | app.service(" | + | app.service(" |
| - | app.controller(" | + | app.controller(" |
| - | | + | |
| - | | + | |
| | | ||
| - | $scope.area=cuadrado.getArea(); | + | $scope.area=rectangulo.getArea(); |
| }]); | }]); | ||
| </ | </ | ||
| - | * Línea 3: Aqui hemos definido la función JavaScript con el constructor de nuestra clase llamada "Cuadrado" | + | * Línea 3: Aquí hemos definido la función JavaScript con el constructor de nuestra clase llamada "Rectangulo". |
| - | * Línea | + | * Línea |
| + | |||
| + | ===== 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", | ||
| + | |||
| + | 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 ===== | ===== Service vs value ===== | ||
| - | Ahora, | + | Ahora, |
| - | El ejemplo se podría haber hecho como un '' | + | El ejemplo |
| <sxh js; | <sxh js; | ||
| var app=angular.module(" | var app=angular.module(" | ||
| - | function | + | function |
| this.setAncho=function(ancho) { | this.setAncho=function(ancho) { | ||
| Línea 58: | Línea 143: | ||
| } | } | ||
| - | app.value(" | + | app.value(" |
| - | app.controller(" | + | app.controller(" |
| - | | + | |
| - | | + | |
| | | ||
| - | $scope.area=cuadrado.getArea(); | + | $scope.area=rectangulo.getArea(); |
| }]); | }]); | ||
| </ | </ | ||
| Línea 71: | Línea 156: | ||
| * Línea 18: Le pasamos directamente el objeto de la clase en vez de que internamente sea AngularJS el que cree el objeto. | * 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: | + | Realmente no hay mucha diferencia ya que como veremos mas adelante, tanto los [[unidades: |
| - | Pero aun así, yo veo una ventaja de un '' | + | 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. | 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> | <note tip> | ||
| - | Es preferible usar un '' | + | Es preferible usar un '' |
| + | * Nos podemos | ||
| + | * Permite inyectar dependencias en el constructor | ||
| </ | </ | ||
| ===== Ejemplo ===== | ===== Ejemplo ===== | ||
| + | {{url> | ||
| ===== Referencias ===== | ===== Referencias ===== | ||
| * [[https:// | * [[https:// | ||
| - | |||
| - | |||
| - | |||
unidades/03_servicios/07_service.1406633005.txt.gz · Última modificación: por admin
