在覆盖$ exceptionHandler中使用$ http时修复循环依赖?

时间:2014-03-31 07:41:03

标签: javascript angularjs

我通过注入$ http来覆盖$ exceptionHandler。我这样做是因为我向服务器记录了一个恐怖。

Module.factory('$exceptionHandler', ['$http', function ($http) {
    "use strict";
//code
} 

但是我也有一个拦截器来添加我的$ httpProvider:

Module.config(['$httpProvider', function($httpProvider) {
      $httpProvider.interceptors.push('special-http');
    }]);

这是拦截器(我在工厂里包装):

Module.factory('special-http', ['$templateCache', function($templateCache) {
  "use strict";

  return {
    'request': function(config) {

      if ($templateCache.get(config.url)){
        return config;
      }

     //some logic

      return config;
    }
  }
}]);

EDIT_的 _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____

修复'$ http'的名称后

我现在收到此错误:

Uncaught Error: [$injector:cdep] Circular dependency found: $http <- $exceptionHandler <- $rootScope
http://errors.angularjs.org/1.2.1/$injector/cdep?p0=%24http%20%3C-%20%24exceptionHandler%20%3C-%20%24rootScope 

1 个答案:

答案 0 :(得分:5)

您可以注入$injector以便稍后获取$http

Module.factory('$exceptionHandler', ['$injector', function ($injector) {
    "use strict";

    return function (exception, cause) {
        var $http = $injector.get('$http');
        // code
    };
} 

请参阅this fiddle