2014-06-30 29 views
9

我不明白如何工作模塊化。Angularjs - 如何從另一個不依賴的模塊更正注入服務?

我有3個模塊,它們相互依賴,如圖所示。 enter image description here

「App」模塊包括「module1」和「module2」。 「模塊2」包含「核心」模塊。 There are source on plunker.

angular.module("core", []).factory("HelloWorld", function() { 
    return function() { 
    alert('Hello World!') 
    } 
}); 

angular.module("module1", []).controller("main", function(HelloWorld){ 
    HelloWorld(); 
}); 

angular.module("module2", ["core"]); 

angular.module("app", ["module1", "module2"]); 

如果我注入服務從核心模塊到模塊「模塊1」是工作的罰款。但「核心」模塊不依賴於模塊「module1」。爲什麼發生?

回答

12

由於您的應用程序模塊依賴於核心模塊(間接通過模塊2),因此核心模塊中的服務可在您的應用程序模塊(包括模塊1)內的任何位置使用。

這是因爲Angular會首先加載所有模塊,然後開始實例化它們的組件並解析注入的依賴關係。

但是,如果您確實需要第1單元中的核心服務,那麼您應該使其依賴於核心模塊。這樣,如果模塊2稍後被修改(或完全刪除),則您的應用程序不會中斷,並且您的模塊1將更具自包含性和可重用性(例如,您可以將其與不依賴核心模塊)。

通常,您不應該依賴「間接」依賴性。每個模塊都應該明確聲明它的依賴關係。
Angular足夠聰明,只需加載一個模塊,如果它尚未加載,所以沒有開銷。

從開發競標指南的section on modules

模塊可以列出其他模塊的依賴關係。取決於模塊意味着需要的模塊需要在加載需求模塊之前加載。換句話說,所需模塊的配置塊在需求模塊的配置塊之前執行。運行塊也是如此。 即使多個其他模塊需要,每個模塊也只能加載一次。

(重點煤礦)

+1

很好的解釋! – micronyks

+0

這是一個人爲的例子。從邏輯上講,我期望看到一個錯誤,因爲「核心」和「模塊1」之間沒有明確的關係。謝謝 – iKBAHT

+0

@iKBAHT:不客氣! (如果這回答這個問題,請標記爲已接受和/或upvote :) :) – gkalpak