这个想法是在某些情况下从另一个来源获取数据,所以我有这个存根:
factory("interceptor", function ($q, $location, $http) {
return function (promise) {
return promise;
}
}
以
失败[$ injector:cdep]发现循环依赖:拦截器< - $ http
还试图注入$ injector并使用它来检索$ http,结果相同。有什么想法吗?
.config只是声明:
.config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('interceptor');
});
答案 0 :(得分:9)
$injector
注入interceptor
:使用它在回调函数内的返回对象内获取$http
。
这是example
app.config(function ($httpProvider) {
$httpProvider.interceptors.push('interceptor');
});
app.factory("interceptor", function ($q, $location, $injector) {
return {
request: function(config){
var $http = $injector.get('$http');
console.dir($http);
return config;
}
}
});
app.run(function($http){
$http.get('/')
});
答案 1 :(得分:1)
在查看Angular源代码后,更好的答案是这样的。 $ http方法可以在没有依赖注入的情况下访问,所以诀窍是不要INJECT $ http并简单地使用它。像这样:
Right Way
retryModule = angular.module('retry-call', [])
# Do not inject $http
retryModule.factory 'RetryCall', ($q)->
# More object keys
'responseError': (response)=>
# Just use $http without injecting it
$http(response.config)
$q.reject(response)
retryModule.config ['$httpProvider', ($httpProvider)->
$httpProvider.interceptors.push('RetryCall');
]
Wrong Way
# Do not do it this way.
retryModule.factory 'RetryCall', ($q,$http)->