Je fais des demandes à mon API et j'utilise le module de ressources AngularJS $. C'est différent de $ http, donc je ne sais pas comment gérer mes erreurs.
Mon service:
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,
}
});
}]);
Mon contrôleur:
...
Category.query(function(data) {
console.log(data);
});
...
Je veux quelque chose comme ça ou .. Je ne sais pas comment gérer les erreurs si mon API ne fonctionne pas ..
Category.query().success(function() {
console.log('success');
}).error(function() {
console.log('error');
});
vous pouvez transmettre le gestionnaire d'erreurs en tant que second paramètre toquery
.
Category.query(function(data) {}, function() {});
EDIT:
pour rendre les choses un peu plus claires, quelques exemples:
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
});
Vous pouvez définir un gestionnaire d'erreurs lors de la création de la ressource en ajoutant un objet interceptor
dans la description d'une méthode, avec une propriété responseError
, liée à votre fonction d'erreur.
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'}
};
où resourceErrorHandler
est une fonction appelée à chaque erreur sur la méthode get ou query. Pour le problème posé, la méthode get est la seule nécessaire. Bien sûr, vous pouvez appliquer cela à n'importe quelle action.
Un autre intercepteur response
existe pour que $ resource attrape une réponse normale.
{'get': {method:'GET', interceptor : {response : resourceResponseHandler}},
Les intercepteurs font partie du module $http
, vous pouvez en outre lisez ces informations dans leur documentation .
Voici un nouvel exemple ES6 (j'utilise TypeScript) sur mon ng.resource
resolve: {
detail: function (myService, $stateParams) {
return myService.getEventDetail({ id: $stateParams.id }).$promise.then(data => data, error => false );
}
}
et puis dans mon contrôleur, le 'détail' injecté dans le contrôleur résoudra soit les données (bon), soit faux pour une erreur, où je gère l'affichage de 404.