Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在服务Angularjs中使用服务_Javascript_Angularjs_Twitter Bootstrap_Angular Ui_Angular Ui Bootstrap - Fatal编程技术网

Javascript 在服务Angularjs中使用服务

Javascript 在服务Angularjs中使用服务,javascript,angularjs,twitter-bootstrap,angular-ui,angular-ui-bootstrap,Javascript,Angularjs,Twitter Bootstrap,Angular Ui,Angular Ui Bootstrap,我试图将引导ui$modal服务注入我的工厂,但当我这样做时,我会遇到循环依赖性问题,当我不这样做时,$modal没有定义。代码如下所示: retryModule = angular.module('g4plus.retry-call', ['ui.bootstrap']) retryModule.factory 'RetryCall', ($q, $rootScope)-> requests = {} failedRequests = {} uniqueId = 0 m

我试图将引导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服务,称之为类似于HttpInterceptor的东西,然后使用

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...
            },
            ...
        }
    }]));
}]);

公认的答案并不能提供有效的解决方案

这里的问题是$modal依赖于$http$modal无法在拦截器中请求$http,因为$http尚不存在,因为您仍处于配置阶段,正在配置$httpProvider

用户thaumant的回答解释了如何解决此问题,如下所示:


您得到的循环依赖项错误是什么?你能提供可运行的代码吗?为什么使用指令或控制器不能达到目的?它挫败了什么目的?我正在制作一个全局http拦截器,当出现连接错误时,它将显示一个模式。这不应该依赖于向html中添加一个指令,而是允许开发人员简单地包含工厂,并在一天内调用它。错误是:未捕获错误:[$injector:cdep]找到循环依赖项:$modal对我来说就像一个模块。开发人员可以将他们的应用程序设置为依赖于该模块,并可能在其中声明一条指令,并在一天内调用该指令。这不需要太多的工作,指令就是为了这个。代码确实位于导入的模块中。我只是想在代码中使用一个简单的服务。忘记$modal服务做任何DOM的事情,我需要知道的只是如何使用该服务。我在你发布的代码中没有看到任何需要$modal的东西。。。我认为循环依赖是因为$modal需要$http,而您正试图设置一个拦截器。你能再发一些代码吗?如何设置$http拦截器?RetryCall的完整定义是什么?您在哪里需要$modal?我已经这样做了。对不起,如果我没有发布完整的代码,但我觉得我展示了相关部分。不,这不是解决方案。