我想测试一个模块是否已经创建。是否可以使用如下所示的简单代码进行检查?
if(angular.module('myApp') == undefined){
angular.module('myApp', ['ngRoute']);
}
答案 0 :(得分:1)
不,这并不容易。如果使用单个参数调用angular.module
- 模块的名称 - 它总是抛出一个错误,除非模块已经存在(source):
if (!requires) {
throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
"the module name or forgot to load it. If registering a module ensure that you " +
"specify the dependencies as the second argument.", name);
}
这一点与其他语言的import子句大致相同:如果你导入一个模块(很可能是另一个模块的依赖关系)并且它还没有,那就是一个严重的错误 - 一个类型的显示停止因此是一个错误(而不只是返回null
或其他东西)。
并且没有简单的方法来访问模块列表:它存储在moduleLoader的本地变量中。因此,解决此问题的一种可能方法是将检查包装在try-catch
:
function isModuleRegistered(moduleName) {
var isThere = true;
try {
angular.module(moduleName);
}
catch {
isThere = false;
}
return isThere;
}
仍然我不得不说如果需要这样的技巧,那就是代码味道。 Angular有一个很好的(不完美但很好的)依赖注入系统,并且将它与不同的加载器(例如RequireJS)结合起来并不困难。如果你需要手动检查一个模块是否还在那里,那么很可能还有一个缺点就是等着咬你。 )
我能想到的唯一例外是可以使用单个接口的不同实现的系统 - 并且需要检查提供哪个;但话又说回来,这在配置级别上更容易解决。
答案 1 :(得分:0)
更好的方法可以使用try catch block
try {
var myApp= angular.module("myApp") ;
}
catch(err)
{
angular.module('myApp', ['ngRoute']);
}
答案 2 :(得分:0)
以下对我有用 - 然后如果文件被插入到主index.html文件中两次 - 角度模块只会被创建一次。
var myApp = myApp;
if (!myApp) {
myApp = angular.module('myApp', []);
}