2017-07-06 33 views
1

documentation for the angular.bootstrap(...) method說,第二個參數是:爲什麼自舉* *多個角模塊到*單個*元件

...一個陣列模塊的加載到該應用程序。陣列中的每個項目應該是一個預定義的模塊的名稱或(DI註釋)

我從未見過其穿過的多於一個模塊中進行boostrapped到相同的DOM元素角的代碼。 .. 你爲什麼想這麼做?有角度的教程不提供示例。所以我在StackOverflow上找到了this example。這個例子既自舉和peopleAppthermostatApp文件:

angular.bootstrap(document, ['peopleApp','thermostatApp']); 

如果這些應用程序有一個控制器相同的名稱,會發生什麼?像MyCtrl?哪個定義受到尊重?

如何對多個模塊進行boostrapping;不是創建一個新ConsolidatedModule,其中有依賴一個或多個模塊你會一直boostrapped,然後就自舉ConsolidatedModule不同?即

angular.module('ConsolidatedModule', ['peopleApp', 'thermostatApp']); 
angular.bootstrap(document, ['ConsolidatedModule']) 

要清楚,我不是在談論自舉separate apps to separate DOM elements.(也顯示here

其他傳聞,這讓我感到困惑的是:

  • can't shouldn't (?) bootstrap an app within another already bootstrap'd app(。 ..因爲

    「遍歷它的方式通過DOM和se分配範圍綁定並執行指令鏈接功能。如果你這樣做了兩次,你會遇到的問題「

    - 然而,有兩個模塊不會,遇到問題)

  • 在Angular2自舉同一個元素? ,platformBrowserDynamic.bootstrapModule(...)是單數,意味着其只接受一個參數(我找不到API),所以我更糊塗了什麼意味着角1 *來引導多個模塊相同DOM節點。
+2

*如何boostrapping多個模塊;不同於創建新的ConsolidatedModule *:沒有區別,並且適用於名稱衝突的相同規則。 –

+1

據我所知,用這種結構設計應用程序沒有任何實際的理由。如果你需要處理的是其他人提供的最小化模塊,那麼*可能是一個有用的理由。但是,正如文件在多個地方所暗示的那樣,框架不會「根據這種情況進行主動測試」。 – Claies

+1

我會懷疑bootstrap代碼完全支持這一事實很可能是一個遺留的工件,它不值得去除,但在框架的改造中甚至沒有考慮到。 – Claies

回答

1

有不同之處在於在第一種情況下產生不需要的ConsolidatedModule模塊

angular.module('ConsolidatedModule', ['peopleApp', 'thermostatApp']); 
angular.bootstrap(document, ['ConsolidatedModule']) 

angular.bootstrap(document, ['peopleApp', 'thermostatApp']) 

之間沒有差別。只有1個注入器被創建,並且使用多模塊自舉與多自舉無關。

第二個參數允許動態提供一個模塊列表。即

const modulesList = ['foo']; 

if (ENV_BAR) 
    modulesList.push('bar'); 

angular.bootstrap(document, modulesList); 
+0

好吧,我已經準備好接受這個答案,因爲評論已經迴應了同樣的想法,但請解釋:「多模塊引導無關多次引導。「 - 那些是什麼?或者:這與我在問題中所做的相同的區別是什麼?我*不*指*「引導單獨的應用程序來分離DOM元素」。 (我想你會把它稱爲「多重引導?」) –

+0

並且,非常感謝您特別針對我的問題「如何用多個模塊進行boostrapping與一個ConsolidatedModule不同」,可以闡明「多個模塊的boostrapping如何不同比在另一個模塊(即嵌套)中增加一個模塊*是否允許,後者是否允許,沒有錯誤?是否類似?「 –

+0

最後,當我嘗試查看「ConsolidatedModule」行爲是否相似時,我很驚訝地發現'peopleApp'和'thermostatApp'現在可以使用彼此的服務,即使它們被聲明爲「兄弟姐妹」。即'peopleApp'可以使用'thermostatApp'服務構建服務,即使不直接依賴'thermostatApp';但僅僅是因爲*'peopleApp'和'thermostatApp'都是作爲多模塊進行boostrapped(或合併在一起然後進行boostrapped,正如您所指出的那樣)基本上是相同的 –