与$ http的AngularJS循环依赖问题

时间:2014-08-04 19:09:39

标签: angularjs

我遇到循环依赖问题。我构建了一个$http拦截器来处理所有$http错误,并使用模态(Angular UI-Bootstrap)提醒用户。

依赖关系链如下所示:

$http <- $modal <- ErrorHandlerService <- HTTPErrorInterceptorService <- $http

我得到的错误是:

Uncaught Error: [$injector:cdep] Circular dependency found: $http <- $modal <- ErrorHandlerService <- HTTPErrorInterceptorService <- $http <- $templateFactory <- $view <- $state

我有read解决这些类型问题的诀窍是使用$injector。我尝试使用$injector注入$modal,我尝试使用$injector注入ErrorHandlerService,但我仍然获得了Circular dependency error

有人有任何想法如何解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:7)

trickmentioned question的重要一点是,您在拦截器的运行时间内将依赖关系解析为$modal,而不是在工厂中。

这将有效

angular.module('app')
  .factory('httpAuthInterceptor', function($q, $injector) {
    let $modal;  
    return {
      responseError: (rejection) => {
        if (rejection.status === 401) {
          $modal = $modal || $injector.get('$modal');
          $modal.open({
            template: 'not logged in'
          });
        }
        return $q.reject(rejection);
      }
    };
  })
;

这不起作用

angular.module('app')
  .factory('httpAuthInterceptor', function($q, $injector) {
    let $modal = $injector.get('$modal');  
    return {
      responseError: (rejection) => {
        ...
      }
    };
  })
 ;