unidades:10_servidor:07_remoteresource
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:10_servidor:07_remoteresource [2014/09/03 19:23] – [Añadir un nuevo seguro médico] admin | unidades:10_servidor:07_remoteresource [2014/09/04 15:01] (actual) – borrado admin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 10.7 remoteResource ====== | ||
| - | Ya tenemos un API REST funcionando en el servidor, así que vamos a volver a la parte de AngularJS para por fin tener una aplicación funcionando capaz de hacer un CRUD. | ||
| - | |||
| - | ===== remoteResource ===== | ||
| - | Lo primero es acabar el servicio '' | ||
| - | |||
| - | <sxh js; | ||
| - | function RemoteResource($http, | ||
| - | this.get = function(idSeguro) { | ||
| - | var defered = $q.defer(); | ||
| - | var promise = defered.promise; | ||
| - | |||
| - | $http({ | ||
| - | method: ' | ||
| - | url: baseUrl + '/ | ||
| - | }).success(function(data, | ||
| - | defered.resolve(data); | ||
| - | }).error(function(data, | ||
| - | if (status === 400) { | ||
| - | defered.reject(data); | ||
| - | } else { | ||
| - | throw new Error(" | ||
| - | } | ||
| - | }); | ||
| - | |||
| - | return promise; | ||
| - | |||
| - | }; | ||
| - | |||
| - | this.list = function() { | ||
| - | var defered = $q.defer(); | ||
| - | var promise = defered.promise; | ||
| - | |||
| - | $http({ | ||
| - | method: ' | ||
| - | url: baseUrl + '/ | ||
| - | }).success(function(data, | ||
| - | defered.resolve(data); | ||
| - | }).error(function(data, | ||
| - | if (status === 400) { | ||
| - | defered.reject(data); | ||
| - | } else { | ||
| - | throw new Error(" | ||
| - | } | ||
| - | }); | ||
| - | |||
| - | |||
| - | return promise; | ||
| - | }; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | * Linea 31: Hemos puesto la URL correcta para acceder al servidor, incluyendo el valor del '' | ||
| - | * Línea 12: Vamos ahora a tratar de forma distinta si se ha retornado un 400 o cualquier otra cosa. | ||
| - | * Línea 13: Si se ha retornado un 400, lo que hay en data es un array de objetos '' | ||
| - | * Línea 15: En caso de que no sea un 400, será algún error del servidor, así que lanzamos un error de JavaScript ya que lo que ocurrió en el servidor fue un error así que aquí seguimos tratándolo como un error. | ||
| - | |||
| - | * Linea 29: Hemos puesto la URL correcta para acceder al servidor para poder obtener todos los seguros médicos. | ||
| - | * Línea 33: Vamos ahora a tratar de forma distinta si se ha retornado un 400 o cualquier otra cosa. | ||
| - | * Línea 34: Si se ha retornado un 400, lo que hay en data es un array de objetos '' | ||
| - | * Línea 36: En caso de que no sea un 400, será algún error del servidor, así que lanzamos un error de JavaScript ya que lo que ocurrió en el servidor fue un error así que aquí seguimos tratándolo como un error. | ||
| - | |||
| - | |||
| - | Como vemos los cambios han sido mínimos, solo la nueva URL y la gestión del error '' | ||
| - | |||
| - | Pasemos ahora a ver el resto de los métodos. Son casi todos iguales y solo cambia la URL y los datos que se envían. | ||
| - | |||
| - | <sxh js; | ||
| - | this.insert = function(seguroMedico) { | ||
| - | var defered = $q.defer(); | ||
| - | var promise = defered.promise; | ||
| - | |||
| - | $http({ | ||
| - | method: ' | ||
| - | url: baseUrl + '/ | ||
| - | data: seguroMedico | ||
| - | }).success(function(data, | ||
| - | defered.resolve(data); | ||
| - | }).error(function(data, | ||
| - | if (status === 400) { | ||
| - | defered.reject(data); | ||
| - | } else { | ||
| - | throw new Error(" | ||
| - | } | ||
| - | }); | ||
| - | |||
| - | return promise; | ||
| - | }; | ||
| - | |||
| - | this.update = function(idSeguro, | ||
| - | var defered = $q.defer(); | ||
| - | var promise = defered.promise; | ||
| - | |||
| - | $http({ | ||
| - | method: ' | ||
| - | url: baseUrl + '/ | ||
| - | data: seguroMedico | ||
| - | }).success(function(data, | ||
| - | defered.resolve(data); | ||
| - | }).error(function(data, | ||
| - | if (status === 400) { | ||
| - | defered.reject(data); | ||
| - | } else { | ||
| - | throw new Error(" | ||
| - | } | ||
| - | }); | ||
| - | |||
| - | return promise; | ||
| - | }; | ||
| - | |||
| - | this.delete = function(idSeguro) { | ||
| - | var defered = $q.defer(); | ||
| - | var promise = defered.promise; | ||
| - | |||
| - | $http({ | ||
| - | method: ' | ||
| - | url: baseUrl + '/ | ||
| - | }).success(function(data, | ||
| - | defered.resolve(data); | ||
| - | }).error(function(data, | ||
| - | if (status === 400) { | ||
| - | defered.reject(data); | ||
| - | } else { | ||
| - | throw new Error(" | ||
| - | } | ||
| - | }); | ||
| - | |||
| - | return promise; | ||
| - | }; | ||
| - | </ | ||
| - | |||
| - | * Líneas 8 y 29: Se usa la propiedad '' | ||
| - | * Línea 22: Hemos optado por pasar el parámetro '' | ||
| - | |||
| - | |||
| - | <note tip> | ||
| - | Esta clase con poco de trabajo la podríamos hacer genérica y poder reusarla en otros proyectos , sin embargo en vez de usar esta clase existen en AngularJS dos alternativas a crearte tu propia clase: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | Aunque nuestra clase funcione perfectamente, | ||
| - | |||
| - | Aun así nuestra clase '' | ||
| - | |||
| - | </ | ||
| - | |||
| - | ===== La aplicación ===== | ||
| - | Como ya tenemos acabado el servicio '' | ||
| - | * Borrar un seguro médico | ||
| - | * Actualizar los datos de un seguro médico | ||
| - | * Añadir un nuevo seguro médico | ||
| - | ==== Borrar seguro médico ==== | ||
| - | Para borrar un seguro médico vamos a añadir un botón de borrado en la tabla en la que se muestran todos los seguros médicos. Estebotón llamará a una función del '' | ||
| - | |||
| - | <sxh html; | ||
| - | < | ||
| - | < | ||
| - | <tr> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | </ | ||
| - | < | ||
| - | <tr> | ||
| - | <td colspan=" | ||
| - | <td ng-bind=" | ||
| - | </tr> | ||
| - | </ | ||
| - | < | ||
| - | <tr ng-repeat=" | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | <td ng-switch on=" | ||
| - | <span ng-switch-when=" | ||
| - | <span ng-switch-when=" | ||
| - | <span ng-switch-when=""></ | ||
| - | <span ng-switch-default> | ||
| - | </td> | ||
| - | <td> | ||
| - | < | ||
| - | </td> | ||
| - | </tr> | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | * Linea 8: Nueva columna con las acciones a realizar para cada seguro médico | ||
| - | * Línea 29: Añadimos u nuevo botón que al pulsarlo llama a la función '' | ||
| - | |||
| - | El controlador '' | ||
| - | <sxh js; | ||
| - | app.controller(" | ||
| - | $scope.seguros = seguros; | ||
| - | |||
| - | $scope.borrar = function(idSeguro) { | ||
| - | remoteResource.delete(idSeguro).then(function() { | ||
| - | remoteResource.list().then(function(seguros) { | ||
| - | $scope.seguros = seguros; | ||
| - | }); | ||
| - | }); | ||
| - | }; | ||
| - | |||
| - | }]); | ||
| - | </ | ||
| - | * Linea 1: Inyectamos el servicio '' | ||
| - | * Línea 5: Llamamos al método '' | ||
| - | * Línea 6: Si se ha borrado correctamente el seguro médico, volvemos a llamar al método '' | ||
| - | |||
| - | ==== Actualizar los datos de un seguro médico ==== | ||
| - | Vamos ahora actualizar los datos de un seguro médico que ya existe. Lo primera que vamos a hacer es cambiar el nombre del controlador '' | ||
| - | |||
| - | Lo único que vamos a hacer es modificar la función '' | ||
| - | |||
| - | <sxh js; | ||
| - | app.controller(" | ||
| - | |||
| - | $scope.filtro = { | ||
| - | ape1: "" | ||
| - | }; | ||
| - | |||
| - | $scope.sexos = [{ | ||
| - | codSexo: " | ||
| - | descripcion: | ||
| - | }, { | ||
| - | codSexo: " | ||
| - | descripcion: | ||
| - | }]; | ||
| - | |||
| - | |||
| - | |||
| - | $scope.seguro = seguro; | ||
| - | |||
| - | $scope.guardar = function() { | ||
| - | if ($scope.form.$valid) { | ||
| - | remoteResource.update($scope.seguro.idSeguro, | ||
| - | $location.path("/ | ||
| - | }); | ||
| - | } else { | ||
| - | alert(" | ||
| - | } | ||
| - | }; | ||
| - | |||
| - | }]); | ||
| - | </ | ||
| - | * Linea 1: Hemos cambiado el nombre del controlador y también inyectamos los servicios [[unidades: | ||
| - | * Línea 15: Hemos borrado la creación del objeto seguro vacío puesto que ya no nos hace falta. Lo hemos quitado por fin ya que ahora loa vamos a usar al crear un nuevo seguro médico. | ||
| - | * Línea 21: Llamamos al servidor para que actualice los datos del seguro médico en la base de datos del servidor. | ||
| - | * Línea 22: En caso de que se hayan actualizado los datos , navegamos a la página del listado de seguros médicos usando el servicio '' | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ==== Añadir un nuevo seguro médico ==== | ||
| - | Para añadir un nuevo seguro es necesario añadir una nueva ruta y crear un nuevo controlador. | ||
| - | |||
| - | El path de la nueva ruta será ''/ | ||
| - | <sxh js; | ||
| - | $routeProvider.when('/ | ||
| - | templateUrl: | ||
| - | controller: " | ||
| - | }); | ||
| - | </ | ||
| - | * Línea 2: Hay que destacar que estamos usando la misma página HTML que para la edición. No hay ningún problema en reutilizar una misma página en dos rutas distintas o también reutilizar incluso el controlador. | ||
| - | |||
| - | El controlador quedará de la siguiente forma: | ||
| - | |||
| - | <sxh js; | ||
| - | app.controller(" | ||
| - | |||
| - | $scope.filtro = { | ||
| - | ape1: "" | ||
| - | }; | ||
| - | |||
| - | $scope.sexos = [{ | ||
| - | codSexo: " | ||
| - | descripcion: | ||
| - | }, { | ||
| - | codSexo: " | ||
| - | descripcion: | ||
| - | }]; | ||
| - | |||
| - | |||
| - | $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: | ||
| - | }; | ||
| - | |||
| - | |||
| - | $scope.guardar = function() { | ||
| - | if ($scope.form.$valid) { | ||
| - | remoteResource.insert($scope.seguro).then(function() { | ||
| - | $location.path("/ | ||
| - | }); | ||
| - | } else { | ||
| - | alert(" | ||
| - | } | ||
| - | }; | ||
| - | |||
| - | }]); | ||
| - | </ | ||
| - | |||
| - | Para acceder a esta nueva //página// ((realmente a la ruta)) añadimos un en la en la página del listado de seguros médicos | ||
| - | <sxh html> | ||
| - | <a href="#/ | ||
| - | </ | ||
| - | |||
| - | <note tip> | ||
| - | Recuerda que al usar los enlaces de HTML se debe poner la almohadilla "#" | ||
| - | </ | ||
| - | |||
| - | ===== Gestión de errores ===== | ||
unidades/10_servidor/07_remoteresource.1409765001.txt.gz · Última modificación: por admin
