当$ 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

下一篇: click doesn't fire my method