我可以在运行时获得所有已注册模块的列表吗?
例如:
// Some code somewhere in some .js file
var module1 = angular.module('module1', []);
// Some code in some other .js file
var module2 = angular.module('module2', []);
// Main .js file
var arrayWithNamesOfAllRegisteredModules = .....
// (result would be: ['module1', 'module2'])
Run Code Online (Sandbox Code Playgroud)
dfs*_*fsq 44
Angular没有提供检索已注册模块列表的方法(至少我无法在源代码中找到方法).但是,您可以修饰angular.module方法以在数组中存储名称.像这样的东西:
(function(orig) {
angular.modules = [];
angular.module = function() {
if (arguments.length > 1) {
angular.modules.push(arguments[0]);
}
return orig.apply(null, arguments);
}
})(angular.module);
Run Code Online (Sandbox Code Playgroud)
现在你可以检查angular.modules数组了.
Yac*_*ine 17
你可以简单地做:
console.log(angular.module('ModuleYouWantToInspect').requires);
Run Code Online (Sandbox Code Playgroud)
它应该返回一个字符串数组(依赖项).您可以对输出执行相同的操作.
Ed *_*aub 10
如果您正在调试,我发现您可以通过以下方式获取列表:
查找或添加代码以从任何具有任何正文的模块调用run(),例如:
angular.module('myModule')
.run(function() {})
Run Code Online (Sandbox Code Playgroud)
在.run上放置一个断点,然后进入angular.run().在作用域中有一个名为"modules"的对象,它按名称将所有模块作为属性.
这也可以与其他模块方法一起使用,或者可以从代码中访问; 我没有非常努力地理解大图.
小智 6
改善解决方案
(function(angular) {
var orig = angular.module;
angular.modules = [];
angular.modules.select = function(query) {
var cache = [], reg = new RegExp(query || '.*');
for(var i=0,l=this.length;i< l;i++){
var item = this[i];
if(reg.test(item)){
cache.push(item)
}
}
return cache;
}
angular.module = function() {
var args = Array.prototype.slice.call(arguments);
if (arguments.length > 1) {
angular.modules.push(arguments[0]);
}
return orig.apply(null, args);
}
})(angular);
Run Code Online (Sandbox Code Playgroud)
现在您可以选择模块:
angular.modules.select('app.modules.*')
Run Code Online (Sandbox Code Playgroud)
创建模块树:
var app = angular.module('app.module.users', ['ui.router'...]);
var app = angular.module('app.module.users.edit', ['app.modules.users']);
Run Code Online (Sandbox Code Playgroud)
你的主模块应用程序(concat子模块)
angular.module('app', ['ui.bootstrap', 'app.services', 'app.config']
.concat(angular.modules.select('app.module.*')));
Run Code Online (Sandbox Code Playgroud)
给定angular.element,$ injector.modules数组包含已注册模块的列表.
例如
angular.element(document.body).injector().modules
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30990 次 |
| 最近记录: |