我遇到循环依赖问题。我构建了一个$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
。
有人有任何想法如何解决这个问题吗?
谢谢!
答案 0 :(得分:7)
trick中mentioned 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) => {
...
}
};
})
;