与$ http的AngularJS循环依赖问题

Jak*_*ski 5 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

我已经读过 ,解决这些类型问题的诀窍是使用$injector.我已经尝试使用$injector注射$modal,我已经尝试使用$injector注射ErrorHandlerService但我仍然得到了Circular dependency error.

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

谢谢!

小智 7

提到的问题中的技巧的重点是,您在拦截器的运行时期间解决了依赖关系,而不是在工厂中.$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);
      }
    };
  })
;
Run Code Online (Sandbox Code Playgroud)

这不起作用

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