我正在尝试向我的工厂注入一个bootstrap-ui $ modal服务,但是当我这样做时,我得到一个循环依赖问题,而当我没有定义$ modal时。代码如下:
retryModule = angular.module('g4plus.retry-call', ['ui.bootstrap'])
retryModule.factory 'RetryCall', ($q, $rootScope)->
requests = {}
failedRequests = {}
uniqueId = 0
modalInstance = undefined
modalClose = true
### Some more code
alertUser = ()->
modalInstance = $modal.open
template: """
<div class="modal-dialog">
... Some more code ...
我如何在工厂内使用$ modal?请不要让我把这个代码放在一个指令中,因为这会破坏目的。如果我能把它放在一个指令中,我就已经完成了这个项目。控制器也是如此。
谢谢!
如果我将$ modal注入我的工厂,循环依赖性错误是:
未捕获错误:[$ injector:cdep]找到循环依赖项:$ modal&lt; - RetryCall&lt; - $ http&lt; - $ compile
答案 0 :(得分:5)
接受的答案并没有提供可行的解决方案。
此处的问题是$modal
取决于$http
。 $modal
无法在拦截器中请求$http
,因为$http
尚不存在(因为您仍处于配置阶段,配置$httpProvider
)。
用户thaumant的回答解释了如何解决这个问题,在这里:
答案 1 :(得分:2)
原始评论:我发布的代码中没有任何内容需要$modal
...我认为循环依赖是因为$modal
需要{{1}并且您正在尝试设置拦截器。你能发布更多代码吗?你是如何设置$http
拦截器的? $http
的完整定义是什么?您需要RetryCall
在哪里?
可能的答案:将您的拦截器设置为普通的AngularJS服务(称之为$modal
,然后使用
yourHttpInterceptor
或者,您可以创建匿名工厂
yourAngularModule.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('yourHttpInterceptor');
}]);