¡Esta es una revisión vieja del documento!


3.9 provider

Por fin llegamos al provider el último de los tipos de servicios en AngularJS y con el que espero que se entiendan por fin las diferencias entre todos ellos.

Un provider es como un factory solo que permite que se configure antes de crear el valor del servicio. En el tema anterior hemos visto el ejemplo del servicio de hash que se configuraba a través de un value llamado algoritmo. Aunque el ejemplo ha funcionado, la verdad es que es un poco chapucero ya que aparentemente no hay relación entre algoritmo y hash . La relación entre ambos queda poco orientada al objeto. El provider viene en nuestra ayuda creando un objeto previo que permite configurar el factory antes de que cree el valor del servicio. Este nuevo objeto se llama Provider y en un bloque config podremos acceder a él para poder configurar nuestro servicio.

Como siempre hacemos veamos un ejemplo:

function HashProvider() {
  var _algoritmo="";
  
  this.setAlgoritmo=function(algoritmo) {
    _algoritmo=algoritmo;
  };
  
  this.$get=function() {
    var hashFunction;
  
    if (_algoritmo==="MD5") {
      hashFunction=CryptoJS.MD5;
    } else  if (_algoritmo==="SHA-1") {
      hashFunction=CryptoJS.SHA1;
    } else  if (_algoritmo==="SHA-2-256") {
      hashFunction=CryptoJS.SHA256;
    } else  if (_algoritmo==="SHA-2-512") {
      hashFunction=CryptoJS.SHA512;
    } else {
      throw Error("El tipo de algoritmo no es válido:"+_algoritmo);
    }
  
    var hash=function(message) {
      var objHashResult=hashFunction(message);
      
      var strHashResult=objHashResult.toString(CryptoJS.enc.Base64);
    
      return strHashResult;
    }
  
    return hash;
  }
}

app.provider("hash",HashProvider);

Tenemos una nueva clase llamada HashProvider con lo siguiente:

  • _algoritmo: Es una propiedad privada que contendrá el algoritmo a usar.
  • setAlgoritmo: Método público que nos permite establecer el algoritmo a usar antes de crear la función de hash.
  • $get: Método público que es realmente el factory que creará el valor ser servicio.

En toda clase que quiera ser un provider es obligatorio que exista el método público llamado $get. Es una obligación que impone AngularJS para que él sepa cual es el método factory.

Si nos fijamos en el método $get veremos que es exactamente igual al del tema anterior de factory excepto que ahora usa la propiedad privada _algoritmo en vez de llamar al servicio algoritmo.

No vamos a poner un ejemplo aquí pero a la función de $get se le pueden seguir inyectando servicios quedando de la siguiente forma: <sxh js> this.$get=['serv1','serv2',function(serv1,serv2) { }]; <sxh>

unidades/03_servicios/09_provider.1406732651.txt.gz · Última modificación: 2014/07/30 17:04 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0