为什么angularjs核心需要检测是否已创建模块ngLocale?

Fre*_*ang 11 angularjs

在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)

Pet*_*tai 1

原因是 AngularJS 缺乏以优雅的方式检查模块可用性的能力。因此,框架需要为不存在的模块引发“模块加载异常”,而不是 checkModule() 或 findModule()。

Ensure 模块可以接受一个参数来告诉系统是否可以找不到模块,并简单地返回 null 作为结果。

实际上,让模块名称在 var mod = angular.module("?moduleName") 代码路径中以问号开头(而不是在定义模块时)将使其成为一个简单的单行代码来忽略异常。