renderizar - Cómo manejar los errores de $ resource service en AngularJS
renderizar html angularjs (3)
Aquí hay un nuevo ejemplo de ES6 (uso TypeScript) en mi ng.resource
resolve: {
detail: function (myService, $stateParams) {
return myService.getEventDetail({ id: $stateParams.id }).$promise.then(data => data, error => false );
}
}
y luego en mi controlador, ''detalle'' inyectado en el controlador se resolverá con los datos (bueno) o falso para el error, donde manejo la pantalla de 404.
Estoy haciendo solicitudes a mi API y estoy usando el módulo de recursos AngularJS $. Es diferente de $ http, así que no sé cómo manejar mis errores.
Mi servicio:
var appServices = angular.module(''app.services'', [''ngResource'']);
appServices.factory(''Category'', [''$resource'',
function($resource){
return $resource(''/apicategoryerr/?format=:format'', {}, {
query: {
method: ''GET'',
params: { format: ''json''},
isArray: true,
}
});
}]);
Mi controlador:
...
Category.query(function(data) {
console.log(data);
});
...
Quiero algo como esto o ... No sé cómo manejar los errores si mi API no funciona.
Category.query().success(function() {
console.log(''success'');
}).error(function() {
console.log(''error'');
});
Puede definir un controlador de errores en el paso de creación del recurso agregando un objeto interceptor
en la descripción de un método, con una propiedad responseError
, vinculada a su función de error.
function resourceErrorHandler(response) { ... }
$resource(''/path/:param/'', {} ,
{
''get'': {method:''GET'',
interceptor : {responseError : resourceErrorHandler}},
''save'': {method:''POST''},
''query'': {method:''GET'', isArray:true,
interceptor : {responseError : resourceErrorHandler}},
''remove'': {method:''DELETE''},
''delete'': {method:''DELETE''}
};
donde resourceErrorHandler
es una función llamada en cada error en el método get o query. Para el problema planteado, el método get es el único necesario. Por supuesto, puedes aplicar eso a cualquier acción.
Existe otra response
interceptor para $ recurso para capturar una respuesta normal.
{''get'': {method:''GET'', interceptor : {response : resourceResponseHandler}},
Los interceptores son parte del módulo $http
, puede leer más sobre ellos en sus documentos .
puede pasar el controlador de errores como un segundo parámetro para query
.
Category.query(function(data) {}, function() {});
EDITAR:
para aclarar un poco las cosas, algunos ejemplos:
var Resource = $resource(''/restapi/resource'');
Resource.query(function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query({
''query'': ''thequery''
},function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query().$promise.then(function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query({
''query'': ''thequery''
}).$promise.then(function(data) {
// success handler
}, function(error) {
// error handler
});