例:
angular.module('myModule',['depA','depB']) .controller('MyController',function() {}) .service('myService',function() {});
然而,我过去曾在大型角度项目中为团队工作,其中个人控制器/服务/指令保存在他们自己的文件中.我喜欢将它们保存在自己的文件中以保持文件较小的原因.现在的问题是,我是负责将初始部分和构建过程放在一起的人.之前我所要做的就是编写应用程序代码并遵循这些项目的标准.
例:
// file 1 angular.module('myModule','depB']); // file 2 angular.module('myModule') .controller('MyController',function() {});
所以我的问题是,我需要确保发生什么文件加载顺序?我只需要确保在文件2之前加载主模块文件(文件1)吗?
这对我来说似乎很奇怪.如果还有一个服务文件附加到前面提到的模块并且控制器文件2已经加载,但是服务文件还没有加载,那么angular是否可能调用该控制器文件然后最终导致事情变得走出低谷,重新振作起来,重整旗鼓?
另外,如果您认为我以错误的方式处理这个问题,我很乐意听取您的建议.
解决方法
只需确保在注册新模块时,在应用程序引导时,它的模块依赖性应该已经由浏览器加载.
所以,只要你这样做:
angular.module('myApp',['dep1','dep2','dep3']);
应用程序引导时,应该已经加载了dep1,dep2和dep3的文件.
如果您使用< script>标签和自动引导(角度默认值)然后你的< script>的顺序标签应该无关紧要.但是,如果使用像requirejs这样的库,请确保在手动引导之前加载所有依赖项.
其他考虑因素
只要您的模块以正确的顺序加载,那么..
>无需担心控制器,指令,服务,工厂,提供程序,常量或值的顺序
>运行块的顺序可能很重要,因为它们与其他运行块有关,因为它们按照它们的注册顺序(在特定模块内)执行.
>配置块的顺序可能很重要,因为它们与其他配置块有关,因为它们按照它们的注册顺序(在特定模块内)执行.
关于前两点,依赖的顺序(例如[‘dep1′,’dep2′,’dep3’] vs [‘dep2′,’dep3′,’dep1’])也会影响执行顺序运行块和配置块. Angular将遍历依赖树两次并按顺序执行所有配置块,然后执行所有运行块.
Angular使用post-order traversal初始化模块及其关联的配置和运行块.因此,如果我们将模块依赖项表示为树:
遍历的顺序是ACEDBHIGF