在服务Angularjs中使用服务

时间:2014-03-03 23:33:08

标签: javascript angularjs twitter-bootstrap angular-ui angular-ui-bootstrap

我正在尝试向我的工厂注入一个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

2 个答案:

答案 0 :(得分:5)

接受的答案并没有提供可行的解决方案。

此处的问题是$modal取决于$http$modal无法在拦截器中请求$http,因为$http尚不存在(因为您仍处于配置阶段,配置$httpProvider)。

用户thaumant的回答解释了如何解决这个问题,在这里:

I need two instances of AngularJS $http service or what?

答案 1 :(得分:2)

原始评论:我发布的代码中没有任何内容需要$modal ...我认为循环依赖是因为$modal需要{{1}并且您正在尝试设置拦截器。你能发布更多代码吗?你是如何设置$http拦截器的? $http的完整定义是什么?您需要RetryCall在哪里?

可能的答案:将您的拦截器设置为普通的AngularJS服务(称之为$modal,然后使用

添加它
yourHttpInterceptor

或者,您可以创建匿名工厂

yourAngularModule.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push('yourHttpInterceptor');
}]);