Angularjs 有没有办法为拦截器请求$http?
其思想是在某些情况下从另一个来源获取数据,因此我有以下存根:Angularjs 有没有办法为拦截器请求$http?,angularjs,Angularjs,其思想是在某些情况下从另一个来源获取数据,因此我有以下存根: factory("interceptor", function ($q, $location, $http) { return function (promise) { return promise; } } 这与 [$injector:cdep]找到循环依赖项:拦截器注入$injector到拦截器: 使用它可以在回调函数中的返回对象中获取$http 这是一个 在回顾Angular源代码之后,更好的答
factory("interceptor", function ($q, $location, $http) {
return function (promise) {
return promise;
}
}
这与
[$injector:cdep]找到循环依赖项:拦截器注入$injector
到拦截器
:
使用它可以在回调函数中的返回对象中获取$http
这是一个
在回顾Angular源代码之后,更好的答案是这样的$http方法无需依赖项注入即可访问,所以诀窍是不要注入$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)->
@IlanFrumer是的,谢谢你的有用评论。为什么你需要向拦截器中注入$http?如问题中所述:从另一个来源获取数据。例如,requirest是to/url/one.js,我想用/url/two.js中的数据替换它。这是一个相当高的要求,但看起来很整洁。我无法在我的拦截器中使用
$http
,但我可能误解了你的观点。有没有可能你有一把小提琴,或者可以指出你从源头上学到这一点的地方?我可以用这个在拦截器中发出$http请求吗?我必须这么做
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('/')
});
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)->