为什么自举* *多个角模块到*单个*元件

为什么自举* *多个角模块到*单个*元件

问题描述:

documentation for the angular.bootstrap(...) method说,第二个参数是:为什么自举* *多个角模块到*单个*元件

...一个阵列模块的加载到该应用程序。阵列中的每个项目应该是一个预定义的模块的名称或(DI注释)

我从未见过其穿过的多于一个模块中进行boostrapped到相同的DOM元素角的代码。 .. 你为什么想这么做?有角度的教程不提供示例。所以我在*上找到了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

有不同之处在于在第一种情况下产生不需要的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,正如您所指出的那样)基本上是相同的 –