¡Esta es una revisión vieja del documento!
Hemos visto por ahora 2 tipos de servicio , las constant
y los value
. En ambos casos le pasábamos directamente el valor que debía tener el servicio. Con el tipo service
1) le debemos pasar una clase 2) JavaScript y será AngularJS el que cree internamente una instancia de la clase.
Lo veremos mas claro con el siguiente ejemplo:
var app=angular.module("app",[]); function Cuadrado() { this.setAncho=function(ancho) { this.ancho=ancho; } this.setAlto=function(alto) { this.alto=alto; } this.getArea=function() { return this.ancho * this.alto; } } app.service("cuadrado",Cuadrado); app.controller("PruebaController",["$scope","cuadrado",function($scope,cuadrado) { cuadrado.setAncho(3); cuadrado.setAlto(6); $scope.area=cuadrado.getArea(); }]);
service
y le pasamos como segundo parámetro la función con el constructor de la clase “Cuadrado”.
Ahora, ¿que hemos ganado usando un service
en vez de un value
?
El ejemplo se podría haber hecho como un value
de la siguiente forma:
var app=angular.module("app",[]); function Cuadrado() { this.setAncho=function(ancho) { this.ancho=ancho; } this.setAlto=function(alto) { this.alto=alto; } this.getArea=function() { return this.ancho * this.alto; } } app.value("cuadrado",new Cuadrado()); app.controller("PruebaController",["$scope","cuadrado",function($scope,cuadrado) { cuadrado.setAncho(3); cuadrado.setAlto(6); $scope.area=cuadrado.getArea(); }]);
Realmente no hay mucha diferencia ya que como veremos mas adelante tanto los value como los service como los factory son solamente azucar sintáctico respecto a los provider. Es decir , internamente para AngularJS son únicamente un provider pero al ser los provider un poco complejos de programar se han creado estas funciones para simplificar su uso.
Pero aun así, yo veo una ventaja de un service
sobre un value
. Si un servicio nunca se va a usar , AngularJS no lo inicializará por lo tanto usando un service
nos podríamos ahorrar el gasto de crear la instancia si no llegara a usarse o retrasarlo hasta que se use, mientras que con un value
siempre se crearía.
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.
service
que un value
ya que nos podemos ahorrarnos la creación de la instancia o al menos retrasarla hasta que sea necesaria.
service
y no a los servicios en general