我知道(并纠正我,如果我错了)Angular的angular.module('a', ['b', 'c'])
的引导程序是:
b
和c
。a
。引导程序分为3个步骤:
每个步骤首先出现在依赖项b, c
上,然后出现在a
上 - 然后转到下一步。
我在上面的描述中误认了哪里?
由于此plunker表明a
可以依赖b
而b
依赖于a
(它实际上有效),因此我的描述是假的,因为每个模块在引导之前引导其依赖关系。
你能帮忙吗?
答案 0 :(得分:5)
Angular使用模块的延迟执行,其工作方式与您的假设不同。
每个模块都定义了一组依赖项,但没有任何“执行”(就函数调用而言)。然后在定义所有模块后执行该程序。
您的假设:A取决于B,因此它首先执行B.但B取决于A,因此无法加载A或B.
实际:创建模块A,具有依赖关系B.创建模块B,具有依赖关系A.在执行时,由于A和B都存在,因此满足所有依赖关系。
对于配置和运行块:
[...]所需模块的配置块 在需求模块的配置块之前执行。该 对于运行块也是如此。每个模块只能加载一次, 即使多个其他模块需要它。
实际上,这与堆栈类似(没有重复)。在A和B的示例中,首先将A添加到堆栈中,然后添加其依赖关系B.由于B依赖于A而A已经在堆栈中,因此不添加任何内容。因此,配置块按B,A顺序运行。然后运行块以相同的顺序运行。
有关详细信息,请参阅https://docs.angularjs.org/guide/module。