unidades:03_servicios:10_ejemploseguro
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:10_ejemploseguro [2014/07/30 20:32] – admin | unidades:03_servicios:10_ejemploseguro [2014/08/29 22:15] (actual) – admin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== 3.10 Ejemplo servicio ====== | ====== 3.10 Ejemplo servicio ====== | ||
| - | En este tema retomamos ahora el ejemplo del seguro médico para añadir un '' | + | En este tema retornamos |
| - | Al ver el servicio '' | + | Al ver el servicio '' |
| - | El servicio será un objeto llamado '' | + | El servicio será un objeto llamado '' |
| - | Nuestro servicio va a ser un '' | + | ===== La configuración ===== |
| + | |||
| + | Nuestro servicio va a ser un '' | ||
| + | |||
| + | <sxh js> | ||
| + | app.constant(" | ||
| + | </ | ||
| + | |||
| + | La constante vale el valor " | ||
| + | |||
| + | El provider tendrá un único método para configurarlo llamado '' | ||
| + | <sxh js> | ||
| + | app.config([' | ||
| + | remoteResourceProvider.setBaseUrl(baseUrl); | ||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | Fíjate cómo el nombre del provider es " | ||
| + | |||
| + | ===== El provider ===== | ||
| + | Ahora vamos a definir el provider | ||
| + | <sxh js; | ||
| + | function RemoteResourceProvider() { | ||
| + | var _baseUrl; | ||
| + | this.setBaseUrl=function(baseUrl) { | ||
| + | _baseUrl=baseUrl; | ||
| + | } | ||
| + | this.$get=[' | ||
| + | return new RemoteResource($http, | ||
| + | }]; | ||
| + | } | ||
| + | |||
| + | app.provider(" | ||
| + | </ | ||
| + | |||
| + | * Línea 1: Definimos el constructor de la clase '' | ||
| + | * Línea 3: Un método público llamado '' | ||
| + | * Línea 6: El método '' | ||
| + | * Línea 7: Ahora la función de factoría crea el nuevo objeto de la clase '' | ||
| + | * Línea 11: Finalmente se registra el '' | ||
| + | |||
| + | ===== La clase del propio servicio ===== | ||
| + | Por último nos queda definir la propia clase que implementa el servicio que hemos llamado '' | ||
| + | |||
| + | Esta clase tiene un único método llamado '' | ||
| + | |||
| + | <sxh js; | ||
| + | function RemoteResource($http, | ||
| + | this.get=function(fnOK, | ||
| + | $http({ | ||
| + | method: ' | ||
| + | url: baseUrl+'/ | ||
| + | }).success(function(data, | ||
| + | fnOK(data); | ||
| + | }).error(function(data, | ||
| + | fnError(data, | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | * Línea 1: Al constructor de la clase le pasamos el servicio '' | ||
| + | * Línea 2: Es el único método público llamado '' | ||
| + | * Línea 5: La URL que se usará se calcula en función del parámetro '' | ||
| + | * Línea 7: Si todo va bien y se han podido obtener los datos, se llama a la función de callback llamada '' | ||
| + | * Línea 9: Si algo ha fallado, se llama a la función de callback llamada '' | ||
| + | |||
| + | ===== El controlador ===== | ||
| + | Por último nos queda ver cómo queda el controlador al usar el nuevo servicio. | ||
| + | |||
| + | <sxh js; | ||
| + | app.controller(" | ||
| + | $scope.seguro={ | ||
| + | nif:"", | ||
| + | nombre:"", | ||
| + | ape1:"", | ||
| + | edad: | ||
| + | sexo:"", | ||
| + | casado: | ||
| + | numHijos: | ||
| + | embarazada: | ||
| + | coberturas: { | ||
| + | oftalmologia: | ||
| + | dental: | ||
| + | fecundacionInVitro: | ||
| + | }, | ||
| + | enfermedades: | ||
| + | corazon: | ||
| + | estomacal: | ||
| + | rinyones: | ||
| + | alergia: | ||
| + | nombreAlergia:"" | ||
| + | }, | ||
| + | fechaCreacion: | ||
| + | } | ||
| + | |||
| + | remoteResource.get(function(seguro) { | ||
| + | $scope.seguro=seguro; | ||
| + | }, | ||
| + | alert(" | ||
| + | }); | ||
| + | |||
| + | }]); | ||
| + | </ | ||
| + | |||
| + | * Línea 1: Ahora en el controlador en vez de inyectar el servicio '' | ||
| + | * Linea 26: Se llama al método '' | ||
| + | * Línea 27: Si todo va bien , se pasan los datos a la propiedad '' | ||
| + | * Línea 28: Es la segunda función anónima que se llama si hay algún error. | ||
| + | * Línea 29: Si falla algo se ejecuta el '' | ||
| + | ===== Ejemplo ===== | ||
| + | El código completo del ejemplo es el siguiente: | ||
| + | |||
| + | <sxh html; | ||
| + | < | ||
| + | <html ng-app=" | ||
| + | < | ||
| + | <script src="// | ||
| + | <script src=" | ||
| + | </ | ||
| + | <body ng-controller=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label ng-show=" | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | <label for=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <sxh js; | ||
| + | var app = angular.module(" | ||
| + | |||
| + | function RemoteResource($http, | ||
| + | this.get=function(fnOK, | ||
| + | $http({ | ||
| + | method: ' | ||
| + | url: baseUrl+'/ | ||
| + | }).success(function(data, | ||
| + | fnOK(data); | ||
| + | }).error(function(data, | ||
| + | fnError(data, | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | function RemoteResourceProvider() { | ||
| + | var _baseUrl; | ||
| + | this.setBaseUrl=function(baseUrl) { | ||
| + | _baseUrl=baseUrl; | ||
| + | } | ||
| + | this.$get=[' | ||
| + | return new RemoteResource($http, | ||
| + | }]; | ||
| + | } | ||
| + | |||
| + | app.provider(" | ||
| + | |||
| + | |||
| + | |||
| + | app.constant(" | ||
| + | app.config([' | ||
| + | remoteResourceProvider.setBaseUrl(baseUrl); | ||
| + | }]); | ||
| + | |||
| + | |||
| + | app.controller(" | ||
| + | $scope.seguro = { | ||
| + | nif: "", | ||
| + | nombre: "", | ||
| + | ape1: "", | ||
| + | edad: undefined, | ||
| + | sexo: "", | ||
| + | casado: false, | ||
| + | numHijos: undefined, | ||
| + | embarazada: false, | ||
| + | coberturas: { | ||
| + | oftalmologia: | ||
| + | dental: false, | ||
| + | fecundacionInVitro: | ||
| + | }, | ||
| + | enfermedades: | ||
| + | corazon: false, | ||
| + | estomacal: false, | ||
| + | rinyones: false, | ||
| + | alergia: false, | ||
| + | nombreAlergia: | ||
| + | }, | ||
| + | fechaCreacion: | ||
| + | } | ||
| + | |||
| + | remoteResource.get(function(seguro) { | ||
| + | $scope.seguro = seguro; | ||
| + | }, function(data, | ||
| + | alert(" | ||
| + | }); | ||
| + | |||
| + | } | ||
| + | ]); | ||
| + | </ | ||
| + | |||
| + | {{url> | ||
| + | ===== Malas prácticas ===== | ||
| + | En muchos ejemplos que se ven de AngularJS se tiende a definir un provider en un único bloque en vez de definir diversas funciones separadas como hemos hecho aqui. | ||
| + | |||
| + | Podemos ver el siguiente trazo de código en el que se ha definido el provider usando varias funciones anónimas anidadas. | ||
| + | |||
| + | <sxh js> | ||
| + | app.provider(" | ||
| + | var _baseUrl; | ||
| + | this.setBaseUrl = function(baseUrl) { | ||
| + | _baseUrl = baseUrl; | ||
| + | } | ||
| + | this.$get = [' | ||
| + | function($http) { | ||
| + | return new function($http, | ||
| + | this.get = function(fnOK, | ||
| + | $http({ | ||
| + | method: ' | ||
| + | url: baseUrl + '/ | ||
| + | }).success(function(data, | ||
| + | fnOK(data); | ||
| + | }).error(function(data, | ||
| + | fnError(data, | ||
| + | }); | ||
| + | } | ||
| + | }($http, _baseUrl); | ||
| + | } | ||
| + | ]; | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | Este código - aunque funciona - no es recomendable por lo complejo que resulta de entender. | ||
| + | |||
| + | ===== Referencias ===== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
unidades/03_servicios/10_ejemploseguro.1406745157.txt.gz · Última modificación: por admin
