我试图将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

最佳答案

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

可能的答案:将拦截器创建为普通的AngularJS服务(将其称为yourHttpInterceptor,然后通过使用添加它

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


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

yourAngularModule.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push(['$modal', function($modal) {
        return {
            request: function(config) {
                 // Do something...
            },
            ...
        }
    }]));
}]);

关于javascript - 在服务Angularjs中使用服务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22159834/

10-13 02:36