0

我試圖在我的工廠注入一個bootstrap-ui $ modal服務,但是當我這樣做時,我得到一個循環依賴問題,並且當我沒有定義$ modal時。代碼如下所示:在服務中使用服務Angularjs

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?請不要讓我把這些代碼放在一個指令中,因爲這會破壞目的。如果我可以把這個指令放在一個指令中,我會讓這個項目已經完成。控制器也是如此。

謝謝!

如果我注入$莫代爾到我廠循環依賴錯誤是:

未捕獲的錯誤:[$注射器:CDEP]圓形依賴發現:$模式< - RetryCall < - $ HTTP < - $編譯

+1

什麼是循環依賴錯誤你好嗎?你能提供可運行的代碼嗎?爲什麼使用指令或控制器會破壞目的? (其目的是否失敗?) – JeffryHouser

+0

我正在製作一個全局http攔截器,當連接出現錯誤時將顯示一個模式。這不應該依賴於向html添加指令,而是允許開發人員簡單地包含工廠並在一天內調用它。錯誤是:未捕獲的錯誤:[$ injector:cdep]發現循環依賴:$ modal < - RetryCall < - $ http < - $ compile –

+0

聽起來像一個模塊給我。開發人員將能夠設置他們的應用程序依賴於該模塊,並且可能會在其中聲明一個指令並稱之爲一天。這並不是太多的工作,而這正是指令的目的。 –

回答

2

原文評論:我沒有看到你發佈的內容需要$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... 
      }, 
      ... 
     } 
    }])); 
}]); 
+0

我已經這樣做了。對不起,如果我沒有完整地發佈代碼,但我覺得我展示了相關的部分。 –

+0

沒有這個不解決方案。 – nottinhill

5

接受的答案不提供工作解決方案

問題這裏是$modal取決於$http$modal無法在攔截器中請求$http,因爲$http尚不存在(因爲您仍處於配置階段,因此配置$httpProvider)。

此答案由用戶thaumant介紹瞭如何解決這個問題,在這裏:

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