AngularJS - 获取所有注册服务的列表? [英] AngularJS - Get List of All Registered Services?
问题描述
我能否在运行时获得所有注册指令、服务、控制器等的列表...?
您可以获得每个模块的提供者列表(即服务/指令/控制器/工厂/等),尽管该列表有点神秘.
假设您有以下内容:
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){ ... });...
然后 mod
变量将包含一个名为 mod._invokeQueue
的属性,该属性将包含作为该模块一部分的所有提供程序的数组._invokeQueue
看起来像这样:
因此您可以在 mod._invokeQueue
中搜索它包含的每个提供程序.
但这只会包含该特定模块的提供者列表.如果您想获得所有依赖模块的列表,您需要遍历 mod.requires
数组.
如果模块有模块级的依赖,像这样:
var mod = angular.module('myModule', ['otherModule1','otherModule2']);
然后 mod
对象也将有一个 mod.requires
数组,其中包含这些模块依赖项的名称,如下所示:
angular.forEach(mod.requires, function(requiredModuleName){//首先通过调用 angular.module() 获取对所需模块的引用var requiredMod = angular.module(requiredModuleName);//requiredMod 将有自己的 ._invokeQueue//requiredMod._invokeQueue 看起来就像上面的 _invokeQueue...//对 _invokeQueue 中的其他提供者做一些事情});
希望有所帮助.
Can I get a list of all registered directives, services, controllers, etc. at runtime . . . ?
You can get a list of the providers (ie services/directives/controllers/factories/etc) for each module, although the list is kind of cryptic.
Say you have the following:
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){ ... });
...
Then the mod
variable will contain an attribute called mod._invokeQueue
that will contain an array of all the providers that are part of that module. The _invokeQueue
will look something like this:
[
['$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(){}]
...
]
So you can search through that mod._invokeQueue
for each provider that it contains.
But that will only contain the list of providers for that specific module. If you want to get a list of all of the dependent modules, you will need to loop through the mod.requires
array.
If the module has module-level dependencies, like so:
var mod = angular.module('myModule', ['otherModule1','otherModule2']);
Then the mod
object will also have a mod.requires
array that contains the names of those module dependencies, like so:
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
});
Hope that helps.
这篇关于AngularJS - 获取所有注册服务的列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!