当$ http被注入工厂时,$ httpProvider拦截器不工作
我有一个名为'api'的服务,注册如下:
angular .module('myApp') .factory('api', ['$http', function ($http) { // do stuff with $http.get() etc here. }]);
...和$ http正在像其他地方一样被定制:
angular .module('myApp') .factory('httpInterceptor', ['$rootScope', function ($rootScope) { // do stuff to intercept http requests and auth things here }]); angular .module('myApp') .config(function ($httpProvider) { $httpProvider.interceptors.push('httpInterceptor'); });
当我直接将$http
注入到控制器中时,拦截器正在工作,但是当我在我的控制器中使用api
服务时, $http
定制不起作用。 看起来Angular不会按照我创建的工厂所要求的那样添加截取。
我该如何解决这个问题?
这个问题是基于错误的前提。 拦截器实际上是在工作,我只是使用了错误的钩点。 不是自定义拦截器对象的responseError
属性,而是试图拦截response
属性本身的错误。 这就是为什么我认为拦截器完全没有工作。
这个问题并不存在。 提供商的拦截器即使在工厂也能正常工作。
您可以尝试使httpInterceptor
成为配置中的一个变量,而不是将其httpInterceptor
工厂:
angular
.module('myApp')
.config(function ($httpProvider) {
var httpInterceptor = ['$rootScope',
function($rootScope) {
// do stuff to intercept http requests and auth things here
}
];
$httpProvider.responseInterceptors.push(httpInterceptor);
});
请注意,我还将$httpProvider.interceptors
更改$httpProvider.interceptors
$httpProvider.responseInterceptors
并且传递给push()
的参数不是字符串。
让我知道这是否有帮助。
编辑:
你也可以考虑使用这个插件:https://github.com/witoldsz/angular-http-auth。 它在拦截之后有这个很酷的功能: “authService会重试所有先前由于HTTP 401响应而失败的请求。”
链接地址: http://www.djcxy.com/p/77605.html上一篇: $httpProvider interceptor not working when $http is injected into a factory