AngularJS $ intercepteurs de ressources
Comment puis-je ajouter des intercepteurs à un $resource
appel?
Disons que j'ai une ressource usine dite Users
comme;
app.factory('Users', ['$resource', 'resourceInterceptor',
function ($resource, resourceInterceptor) {
return $resource(
'users/:user_id',
{
user_id: '@id'
},
{
query: {
method: 'GET', //Not changing the default method, just adding an interceptor
interceptor: resourceInterceptor //Is there any better way to do this.. like globally?
},
save: {
method: 'POST', //Same here
interceptor: resourceInterceptor //Again...
},
..., //And so on
}
);
}]);
et mon resourceInterceptor
service ressemble;
app.factory('resourceInterceptor', ['$rootScope',
function ($rootScope) {
return {
request: function () {
//This function isn't executed at all?
$rootScope.loading = true;
},
response: function () {
$rootScope.loading = false;
},
responseError: function () {
$rootScope.loading = false;
}
};
}]);
Tout d'abord, la request
intercepter fonction n'est jamais exécutée, pourquoi pas?
Deuxièmement, avoir à coder en dur l'intercepteur existants $resource
méthodes est très fastidieux , il est un moyen plus facile d'attribuer des intercepteurs spécifiques $resource
appels, ou peut-être même attribuer un intercepteur à tous $resource
appels?
source d'informationauteur Unidan
Vous devez vous connecter pour publier un commentaire.
D'utiliser un intercepteur dans une ressource, vous devez:
1 - Faire un httpInterceptor avec vous le demande, réponse, responseError:
2 - Config l'Intercepteur dans votre application:
Dès maintenant que vous avez vos config httpProvider a un intercepteur où que vous injecter $http, vous allez utiliser ce fournisseur alors... vous allez exécuter votre demande, réponse et responseError d'une fonction.
3 - de l'Utiliser dans une ressource.
$Utilisation des ressources $http, et vous avez une config httpProvider globalement, vous appelez votre intercepteurs' func lorsque vous utilisez vos ressources.
Deuxième question:
Vous ne pouvez pas définir un intercepteur à un béton $http objet, ils (intercepteurs) sont fixés à l'échelle mondiale.
(Même si vous définissez l'intercepteur avant votre définition de module et que vous le supprimez, vous ne pouvez pas savoir l'ordre d'exécution)
Ce que vous pouvez faire si vous ne souhaitez pas remplacer l'intercepteur de la propriété dans chaque $de ressources d'action (comme vous l'écrivez dans votre question), vous pouvez améliorer votre intercepteur.
De la documentation:
Je ne sais pas ce que vous voulez atteindre, mais génériques HTTP intercepteurs pourrait être une alternative.
Un générique HTTP Intercepteur doit faire ce que vous voulez. Vous pouvez trouver un exemple ici: Poignée de réponse HTTP 302 à partir de proxy dans angularjs.