定义Angular模块时,我定义了我的依赖项,如下所示: var myModule = angular.module(“MyModuleName”,[“Dep1”,“Dep2”,“Dep3”]);
每个依赖项都有自己的依赖项,指令,控制器等。
有没有办法向AngularJS询问可用的注射剂是什么?没有实例化它们,只需要一个列表。
Angular。$ injector只有一个“get”方法,但这意味着我将实例化它。
由于 吉尔阿姆兰
答案 0 :(得分:3)
实际上这是一种黑客攻击,所以只能用于测试和学习目的!!
所有$ injector DI魔法都保存在这个文件中:
https://github.com/angular/angular.js/blob/v1.2.7/src/auto/injector.js
查看createInjector函数(第598行:angularjs 1.2.7 )
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;