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 connais pas de moyen de gérer les erreurs si mon API ne fonctionne pas.
Category.query().success(function() {
console.log('success');
}).error(function() {
console.log('error');
});
angularjs
angular-resource
Valkirilov
la source
la source
Resource.query().$promise.then(function(data) {}, errorFunction)
. Vous devrez toujours l'inclure à chaque endroit où vous utilisez une requête, mais au moins vous ne la redéfinirez pas à chaque fois.myResource.$save
etmyResource.$delete
est la promesse. Vous pouvez donc le fairemyResource.$save().then(...)
.Vous pouvez définir un gestionnaire d'erreurs à l'étape de création de la ressource en ajoutant un
interceptor
objet dans la description d'une méthode, avec uneresponseError
propriété, liée à votre fonction d'erreur.où
resourceErrorHandler
est une fonction appelée sur 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 l'appliquer à n'importe quelle action.Un autre intercepteur
response
existe pour $ resource pour attraper une réponse normale.Les intercepteurs font partie du
$http
module, vous pouvez en savoir plus sur eux dans leur documentation .la source
Voici un nouvel exemple ES6 (j'utilise TypeScript) sur mon ng.resource
puis dans mon contrôleur, le `` détail '' injecté dans le contrôleur sera soit résolu en données (bonnes), soit fausses pour erreur, où je gère l'affichage de 404.
la source