【发布时间】:2015-08-20 17:39:22
【问题描述】:
我正在为 http 查询实现自定义拦截器。它需要访问 $httpProvider 中定义的默认标头。
是否可以将 $httpProvider(不是 $http 的实例,因为这会导致循环引用)作为依赖项注入到拦截器工厂中?
【问题讨论】:
-
您是否尝试将另一个服务调用到拦截器中?
标签: angularjs
我正在为 http 查询实现自定义拦截器。它需要访问 $httpProvider 中定义的默认标头。
是否可以将 $httpProvider(不是 $http 的实例,因为这会导致循环引用)作为依赖项注入到拦截器工厂中?
【问题讨论】:
标签: angularjs
不,你不能。
提供者是向您返回工厂/服务/任何功能的对象,并且在您的工厂创建之前运行。
事实上是这样的:
$http 已经创建并且是不可变的。简而言之:在生成所有实例之前,您只能在引导程序 .config() 块中注入提供程序。
【讨论】:
您可以改为注入$injector:
.factory("MyInterceptor", ["$injector",
function($injector) {
return {
response /* or any other */: function(response) {
var $http = $injector.get("$http");
// here, you have access to $http.defaults.headers,
// see https://docs.angularjs.org/api/ng/service/$http#setting-http-headers
return response;
}
};
}])
然后,在一些.config() 块中:
$httpProvider.interceptors.push('MyInterceptor');
【讨论】:
:))。