unidades:03_servicios:08_factory
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:08_factory [2014/07/30 13:32] – [value vs service vs factory] admin | unidades:03_servicios:08_factory [2014/09/22 18:57] (actual) – admin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== 3.8 factory ====== | ====== 3.8 factory ====== | ||
| - | En este tema vamos a ver el servicio de '' | + | En este tema vamos a ver el servicio de '' |
| - | Para que se entienda vamos a ver los ejemplos que teníamos con el '' | + | Para que se entienda, vamos a ver los ejemplos que teníamos con el '' |
| <sxh js; | <sxh js; | ||
| Línea 43: | Línea 43: | ||
| * Líneas 7-16: El valor del servicio " | * Líneas 7-16: El valor del servicio " | ||
| * Líneas 18-20: En el servicio de " | * Líneas 18-20: En el servicio de " | ||
| - | * Líneas 22-26: El valor del servicio " | + | * Líneas 22-26: El valor del servicio " |
| * Línea 28: Por último vemos que en el controlador se usan igual los servicios independientemente de si son '' | * Línea 28: Por último vemos que en el controlador se usan igual los servicios independientemente de si son '' | ||
| Línea 90: | Línea 90: | ||
| * Línea 25: Como ya hemos visto en las funciones de los controladores, | * Línea 25: Como ya hemos visto en las funciones de los controladores, | ||
| - | * Línea 26: Aquí es cuando se ve realmente | + | * Línea 26: Aquí es cuando se ve realmente |
| * Línea 28: como ya sabemos se debe retornar el valor del servicio. | * Línea 28: como ya sabemos se debe retornar el valor del servicio. | ||
| Línea 96: | Línea 96: | ||
| ===== La necesidad del factory ===== | ===== La necesidad del factory ===== | ||
| + | Vamos a explicar ahora un ejemplo en el que necesitamos la función factory ya que la creación del valor del servicio va a ser un poco compleja. | ||
| + | Vamos a suponer que necesitamos enviar el hash de una contraseña a un servidor. Vamos a tener un servicio de AngularJS llamado '' | ||
| + | queremos que este servicio sea reutilizable por lo que va a soportar varios tipos de funciones de Hash: MD5, SHA1, SHA2-256 y SHA-2-512. | ||
| + | <note tip> | ||
| + | Para implementar las distintas funciones de Hash vamos a usar la librería [[https:// | ||
| + | Las distintas funciones de Hash que tiene son: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | y la forma de generar el resultado en Base64 es mediante [[https:// | ||
| + | |||
| + | Un ejemplo de todo ello es el siguiente: | ||
| + | |||
| + | <sxh js> | ||
| + | <script src=" | ||
| + | <script src=" | ||
| + | < | ||
| + | var hash = CryptoJS.SHA256(" | ||
| + | |||
| + | alert(hash.toString(CryptoJS.enc.Base64)); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Para configurar el servicio es necesario crear un '' | ||
| + | <sxh js> | ||
| + | app.value(" | ||
| + | </ | ||
| + | Es este caso hemos configurado el algoritmo para que sea " | ||
| + | |||
| + | Gastar el servicio '' | ||
| + | <sxh js; | ||
| + | app.controller(" | ||
| + | $scope.password=" | ||
| + | $scope.getHash=function(message) { | ||
| + | var hashResult=hash(message); | ||
| + | return hashResult; | ||
| + | } | ||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | * Línea 1: En el controlador inyectamos la función de hash llamada '' | ||
| + | * Línea 3: Se ha creado en el '' | ||
| + | |||
| + | El código HTML es el siguiente: | ||
| + | <sxh html; | ||
| + | < | ||
| + | <html ng-app=" | ||
| + | |||
| + | < | ||
| + | <script src="// | ||
| + | <script src=" | ||
| + | <script src=" | ||
| + | <script src=" | ||
| + | <script src=" | ||
| + | <script src=" | ||
| + | <script src=" | ||
| + | </ | ||
| + | |||
| + | <body ng-controller=" | ||
| + | Contrase& | ||
| + | <br> | ||
| + | El hash de la contrase& | ||
| + | <br> | ||
| + | {{getHash(password)}} | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | * Líneas 7-11: Cargamos la librería con los 4 algoritmos de Hash a usar y la codificación en Base64. | ||
| + | * Línea 15: Tenemos un tag ''< | ||
| + | * Línea 18: Se llama a la función '' | ||
| + | |||
| + | Ahora viene la parte interesante, | ||
| + | |||
| + | ==== El factory ==== | ||
| + | Como ya hemos dicho nuestro servicio llamado '' | ||
| + | |||
| + | Veamos como queda la función: | ||
| + | <sxh js;; | ||
| + | app.factory(" | ||
| + | var hashFunction; | ||
| + | | ||
| + | if (algoritmo===" | ||
| + | hashFunction=CryptoJS.MD5; | ||
| + | } else if (algoritmo===" | ||
| + | hashFunction=CryptoJS.SHA1; | ||
| + | } else if (algoritmo===" | ||
| + | hashFunction=CryptoJS.SHA256; | ||
| + | } else if (algoritmo===" | ||
| + | hashFunction=CryptoJS.SHA512; | ||
| + | } else { | ||
| + | throw Error(" | ||
| + | } | ||
| + | | ||
| + | var hash=function(message) { | ||
| + | var objHashResult=hashFunction(message); | ||
| + | | ||
| + | var strHashResult=objHashResult.toString(CryptoJS.enc.Base64); | ||
| + | | ||
| + | return strHashResult; | ||
| + | } | ||
| + | | ||
| + | return hash; | ||
| + | | ||
| + | }]); | ||
| + | </ | ||
| + | * Línea 1: Inyectamos el valor del algoritmo a usar. | ||
| + | * Líneas 4 a 14: En función del valor de '' | ||
| + | * Línea 16: Ahora creamos la verdadera función , la cual es la que retornará el servicio.Y que es la que realmente será llamada desde el controlador. Vemos que acepta como único argumento el mensaje. | ||
| + | * Línea 17: Llamamos a la función que verdaderamente genera el Hash | ||
| + | * Línea 19: Ahora transformamos el objeto en un String en Base64 llamando al método '' | ||
| + | * Línea 24: Aquí es donde la función factory retorna la función de hash que hemos creado. | ||
| + | |||
| + | |||
| + | Si has llegado hasta aquí y lo has entendido todo: ¡Felicidades! pero sino , tampoco pasa nada. Era un ejemplo para ver la potencia de las funciones factory y lo útiles que pueden llegar a ser. Así que lo realmente útil siempre es el '' | ||
| + | |||
| + | |||
| + | {{url> | ||
| ===== value vs service vs factory ===== | ===== value vs service vs factory ===== | ||
| - | Esta es la típica pregunta que aparece siempre en los foros de AngularJS y la respuesta es bastante sencilla. Realmente da igual cual uses porque todos acaban siendo un '' | + | Esta es la típica pregunta que aparece siempre en los foros de AngularJS y la respuesta es bastante sencilla. Realmente da igual cuál uses porque todos acaban siendo un '' |
| - | - Si tienes una clase de la que es necesario crear una instancia mejor usa un '' | + | - Si tienes una clase de la que es necesario crear una instancia mejor usa un '' |
| - | - Si tienes directamente el valor mejor usar el '' | + | - Si tienes directamente el valor, mejor usar el '' |
| - | - Si no queda mas remedio entonces | + | - Si no queda más remedio entonces |
| - | En el siguiente tema por fin veremos el [[unidades: | + | En el siguiente tema por fin veremos el [[unidades: |
| <note tip> | <note tip> | ||
| - | En esta discusión no hemos hablado del '' | + | En esta discusión no hemos hablado del '' |
| </ | </ | ||
| ===== Referencias ===== | ===== Referencias ===== | ||
| * [[https:// | * [[https:// | ||
| - | |||
unidades/03_servicios/08_factory.1406719954.txt.gz · Última modificación: por admin
