angularjs - 如何使用angularJS拦截器只拦截特定的http请求?

标签 angularjs angularjs-service

我知道如何拦截所有请求,但我只想拦截来 self 的资源的请求。

有人知道怎么做吗?

services.config(['$httpProvider',function($httpProvider) {
    $httpProvider.interceptors.push('myHttpInterceptor');
}]);

services.factory("userPurchased", function ($resource) {
    return $resource("/api/user/purchases/:action/:item", 
        {}, 
        {
            'list': {method: 'GET', params: {action: 'list'}, isArray: false},
            'save': {method: 'PUT', params: {item: '@item'}},
            'remove': {method: 'DELETE', params: {item: '@item'}},
        }
    );
});

services.factory('myHttpInterceptor', function($q,$rootScope) {
    // $rootScope.showSpinner = false;
    return {

      response: function(response) {
        $rootScope.showSpinner = false;
        // do something on success
        console.log('success');
        console.log('status', response.status);
        //return response;
        return response || $q.when(response);
      },

     responseError: function(response) {
        // do something on error
        $rootScope.showSpinner = true;
        console.log('failure');
        console.log('status', response.status)
        //return response;
        return $q.reject(response);
      }
    };
  });

最佳答案

如果您只想拦截来自特定资源的请求,可以使用 $request 操作的可选 interceptor 属性。 Angular 的文档 see here (用法>操作)

JavaScript

angular.module('app', ['ngResource']).
  factory('resourceInterceptor', function() {
    return {
      response: function(response) {
        console.log('response intercepted: ', response);
      }
    }
  }).
  factory('resourceService', ['$resource', 'resourceInterceptor', function($resource, resourceInterceptor) {
    return $resource(":name", 
        {}, 
        {
            'list': {method: 'GET', isArray: false, interceptor: resourceInterceptor}
        }
    );
  }]).
  run(['resourceService', '$http', function(resourceService, $http) {
    resourceService.list({name: 'list.json'}); // <= intercepted
    $http.get('list.json'); // <= not intercepted
  }]);

骗子:http://plnkr.co/edit/xjJH1rdJyB6vvpDACJOT?p=preview

关于angularjs - 如何使用angularJS拦截器只拦截特定的http请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021416/

相关文章:

javascript - 为什么我在简单的 angularjs 程序中收到此错误?

javascript - 在 Angularjs 的 2 个不同 Controller 中更新 $scope 时如何绑定(bind)和自动更新 View

angularjs - Angular 翻译从服务器获取默认语言决定

angularjs - 使 jQuery Deferred/Promises 和 AngularJS $q Deferred/Promises 兼容

angularjs - 带有 typescript Controller 的 Angular

AngularJS - 自引用服务?

javascript - Angular - 循环依赖注入(inject)器尝试将 $modal 注入(inject)异常处理程序装饰器

angularjs - 初始化非注入(inject) angular.service

javascript - Angular JS - {{ }} 不起作用,但 data-ng-bind 显示范围

javascript - 在 AngularJS 中使用 $resource 和 $http 管理全局错误