如何获得AngularJS中可用模块的列表?

时间:2014-01-07 14:52:58

标签: javascript angularjs

定义Angular模块时,我定义了我的依赖项,如下所示: var myModule = angular.module(“MyModuleName”,[“Dep1”,“Dep2”,“Dep3”]);

每个依赖项都有自己的依赖项,指令,控制器等。

有没有办法向AngularJS询问可用的注射剂是什么?没有实例化它们,只需要一个列表。

Angular。$ injector只有一个“get”方法,但这意味着我将实例化它。

由于 吉尔阿姆兰

1 个答案:

答案 0 :(得分:3)

实际上这是一种黑客攻击,所以只能用于测试和学习目的!!

所有$ injector DI魔法都保存在这个文件中:

https://github.com/angular/angular.js/blob/v1.2.7/src/auto/injector.js

查看createInjector函数(第598行:angularjs 1.2.7

  • providerCache 变量是配置块中$ injector可用的容器。
  • instanceCache 变量是所有其他块中$ injector可用的容器。
function createInjector(modulesToLoad) {
  var INSTANTIATING = {},
      providerSuffix = 'Provider',
      path = [],
      loadedModules = new HashMap(),
      providerCache = {
        $provide: {
            provider: supportObject(provider),
            factory: supportObject(factory),
            service: supportObject(service),
            value: supportObject(value),
            constant: supportObject(constant),
            decorator: decorator
          }
      },
      providerInjector = (providerCache.$injector =
          createInternalInjector(providerCache, function() {
            throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
          })),
      instanceCache = {},
      instanceInjector = (instanceCache.$injector =
          createInternalInjector(instanceCache, function(servicename) {
            var provider = providerInjector.get(servicename + providerSuffix);
            return instanceInjector.invoke(provider.$get, provider);
          }));

这些变量很好地封装在封闭内,你无法从外部获取它们。

除非您将这两行添加到createInjector函数中:

window.providerCache = providerCache;
window.instanceCache = instanceCache;

如何使用它: