在AngularJS源代码中,有一个这样的部分,评论由我添加
try {
angularModule('ngLocale'); //this detect wether ngLocale has been created
} catch (e) {
//if not created , then create it here
angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
}
Run Code Online (Sandbox Code Playgroud)
我理解它是如何ngLocale工作的,因为你可以通过使用像这样的文件来覆盖默认ngLocale的$locale服务
<script src="../src/ngLocale/angular-locale_fr-ca.js"></script>
Run Code Online (Sandbox Code Playgroud)
但是在AngularJS核心运行之后.因为异常总是抛出,从字面上看,为什么不只是删除检测代码,而只是简单地使用它?
angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
Run Code Online (Sandbox Code Playgroud)
原因是 AngularJS 缺乏以优雅的方式检查模块可用性的能力。因此,框架需要为不存在的模块引发“模块加载异常”,而不是 checkModule() 或 findModule()。
Ensure 模块可以接受一个参数来告诉系统是否可以找不到模块,并简单地返回 null 作为结果。
实际上,让模块名称在 var mod = angular.module("?moduleName") 代码路径中以问号开头(而不是在定义模块时)将使其成为一个简单的单行代码来忽略异常。