app.config中的角度多个拦截器

时间:2015-06-16 13:12:02

标签: angularjs interceptor

在我的角度应用中,我想向所有外部API调用添加信息。

为此,我使用我在app.config中调用的拦截器。

app.config(['$httpProvider', ... , function($httpProvider, ...){      
    $httpProvider.interceptors.push('globalInterceptorService');
    $httpProvider.interceptors.push('authInterceptorService');
}]);

当我只使用一个拦截器时它工作正常。但是当我使用其中两个时(如上例所示),一个人的行动会被另一个人所取代。

有关如何处理多个拦截器的任何想法?也许建议只有1?任何帮助都非常感激。

拦截器1:

function globalInterceptorService ($q, localStorageService) {

  var service = {};

  var _request = function (config) {

    config.headers = config.headers || {};

    var AreaId = localStorageService.get('AreaId');
    if (AreaId) {

      config.headers.AreaId = 'AreaId ' + AreaId;

    }

    return config;
  };

  service.request = _request;

  return service;
}

拦截器2:

function authInterceptorService ($q, $location, localStorageService) {

  var service = {};

  var _request = function (config) {

    config.headers = config.headers || {};

    var authData = localStorageService.get('authorizationData');
    if (authData) {
      config.headers.Authorization = 'Bearer ' + authData.token;
    }

    return config;
  };

  service.request = _request;

  return service;
}

1 个答案:

答案 0 :(得分:2)

我认为你应该推送函数,而不是它的字符串名称。

function globalInterceptorService($q, localStorageService){...}
$httpProvider.interceptors.push(globalInterceptorService);

示例:http://jsfiddle.net/aartek/tbhobfbu

或者

function globalInterceptorService($q, localStorageService){...}
$provide.factory('globalInterceptorService',globalInterceptorService)
$httpProvider.interceptors.push('globalInterceptorService');

示例:http://jsfiddle.net/aartek/tbhobfbu/2/

documentation

中对此进行了详细描述