ten*_*ent 64
您可以获得每个模块的提供程序列表(即服务/指令/控制器/工厂/等),尽管列表有点神秘.
说你有以下内容:
var mod = angular.module('myModule', []);
mod.factory('fact1', function($dependency1, $dependency2){ ... });
mod.service('serv1', function($dependency3, $dependency4){ ... });
mod.controller('ctrl1', function($dependency2, $dependency3){ ... });
mod.factory('fact2', function($dependency1, $dependency4){ ... });
...
Run Code Online (Sandbox Code Playgroud)
然后mod变量将包含一个名为的属性mod._invokeQueue,该属性将包含属于该模块的所有提供者的数组.该_invokeQueue会是这个样子:
[
['$provide', 'factory', Arguments['fact1', ['$dependency1', '$dependency2', function(){}],
['$provide', 'service', Arguments['serv1', ['$dependency3', '$dependency4', function(){}],
['$provide', 'controller', Arguments['ctrl1', ['$dependency2', '$dependency3', function(){}],
['$provide', 'factory', Arguments['fact2', ['$dependency1', '$dependency4', function(){}]
...
]
Run Code Online (Sandbox Code Playgroud)
因此,您可以搜索mod._invokeQueue它包含的每个提供程序.
但那只包含该特定模块的提供者列表.如果要获取所有相关模块的列表,则需要循环遍历该mod.requires数组.
如果模块具有模块级依赖关系,如下所示:
var mod = angular.module('myModule', ['otherModule1','otherModule2']);
Run Code Online (Sandbox Code Playgroud)
然后该mod对象还将mod.requires包含一个包含这些模块依赖项名称的数组,如下所示:
angular.forEach(mod.requires, function(requiredModuleName){
// first get a reference to the required module by calling angular.module()
var requiredMod = angular.module(requiredModuleName);
// requiredMod will have its own ._invokeQueue
// requiredMod._invokeQueue will look like the _invokeQueue from above
...
// do something with the additional providers in _invokeQueue
});
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
小智 37
试试这个:
angular.module('MyApp')['_invokeQueue'].forEach(function(value){
console.log(value[1] + ": " + value[2][0]);
})
Run Code Online (Sandbox Code Playgroud)
Gil*_*man 30
即:常数,价值观,工厂,服务.
function allServices(mod, r) {
var inj = angular.element(document).injector().get;
if (!r) r = {};
angular.forEach(angular.module(mod).requires, function(m) {allServices(m,r)});
angular.forEach(angular.module(mod)._invokeQueue, function(a) {
try { r[a[2][0]] = inj(a[2][0]); } catch (e) {}
});
return r;
};
allMyServices = allServices('myApp');
Run Code Online (Sandbox Code Playgroud)
现在,当您在控制台中输入时,allMyServices.您将获得一个自动完成列表.
在某些angular.element(document).injector()返回undefined的情况下,上述函数可能会失败.您可以使用以下功能代替......
var inj;
function allServices(mod, r) {
if (!r) {
r = {};
inj = angular.element(document.querySelector('[ng-app]')).injector().get;
}
angular.forEach(angular.module(mod).requires, function(m) {allServices(m,r)});
angular.forEach(angular.module(mod)._invokeQueue, function(a) {
try { r[a[2][0]] = inj(a[2][0]); } catch (e) {}
});
return r;
};
allMyServices = allServices('myApp');
Run Code Online (Sandbox Code Playgroud)
现在,当您在控制台中输入时,allMyServices.您将获得一个自动完成列表.
'MyApp'使用您的模块名称替换.| 归档时间: |
|
| 查看次数: |
35332 次 |
| 最近记录: |