我正在尝试为每个API请求注入自定义标头。当我提供一些硬编码文本时,它可以工作。
工作代码
myApp.config(['$httpProvider', function ($httpProvider) {
var requestInterceptor = ['$q', '$rootScope',
function ($q, $rootScope) {
var interceptorInstance = {
request: function (config) {
config.headers['X-MyApp-CustomHeader'] = "foobar";
return config || $q.when(config);
}
};
return interceptorInstance;
}];
$httpProvider.interceptors.push(requestInterceptor);
}]);
无效代码
myApp.config(['$httpProvider', function ($httpProvider) {
var requestInterceptor = ['$q', '$rootScope', '$route',
function ($q, $rootScope, $route ) {
var interceptorInstance = {
request: function (config) {
config.headers['X-MyApp-CustomHeader'] = $route.current.params.CustomParameter;
return config || $q.when(config);
}
};
return interceptorInstance;
}];
$httpProvider.interceptors.push(requestInterceptor);
}]);
错误,尝试注入$route
未捕获错误:[$ injector:cdep]找到循环依赖项:$ route< - $ http http://errors.angularjs.org/1.2.3/ $ injector / cdep?p0 =%24route%20%3C-%20%24http
答案 0 :(得分:18)
这是一个已知的issue。
查看我的答案:Is there a way to request $http for an interceptor?
$route
取决于$http
,myApp.config(['$httpProvider', function ($httpProvider) {
var requestInterceptor = ['$q', '$rootScope', '$injector',
function ( $q, $rootScope, $injector ) {
var interceptorInstance = {
request: function (config) {
var $route = $injector.get('$route');
config.headers['X-MyApp-CustomHeader'] = $route.current.params.CustomParameter;
return config || $q.when(config);
}
};
return interceptorInstance;
}];
$httpProvider.interceptors.push(requestInterceptor);
}]);
依赖于拦截器:
{{1}}
$ injector用于检索由提供程序,实例化类型,调用方法和加载模块定义的对象实例。
在内部,angular.js会使用$ injector来调用你注入了所有依赖项的方法(config / run blocks)。这会自动发生,因此您很少需要担心它。 如果$ injector无法解析您的依赖关系,您可以手动执行此操作。