如何在给定的angular应用程序中获取所有指令名称
How to get all directive names in a given angular app?
假设我有一个angular应用程序,它有一些模块和一些指令
我想获取此应用程序中所有已定义指令的列表。
例如:
var myModule = angular.module('myModule', [function(){...}]);
myModule.directive('myDirective', [function () {...}]);
myModule.directive('myOtherDirective', [function () {...}]);
var myOtherModule = angular.module('myOtherModule', [function(){...}]);
myOtherModule.directive('thirdDirective', [function () {...}]);
我想写一个函数getAllDirectives()
,它将返回['myDirective','myOtherDirective','thirdDirective']
如果可能的话,我也想知道每个指令属于哪个模块:
{
'myModule': ['myDirective','myOtherDirective'],
'myOtherModule':['thirdDirective']
}
如何做到这一点
请注意,我需要在应用程序本身之外以及加载后进行此操作。我确实可以访问页面上公开的任何内容,例如angular
对象和DOM
。
您可以使用如下自定义函数获取每个模块中定义的所有指令:
function get_directives(name) {
var result = [],
invokes = angular.module(name)._invokeQueue;
for(var i=0; i<invokes.length; ++i) {
if(invokes[i][1] == "directive") {
result.push(invokes[i][2][0]);
}
}
return result;
}
var result = {
'myModule': get_directives('myModule'),
'myOtherModule': get_directives('myOtherModule'),
};
您还可以查看angular.module('module_name')._invokeQueue
列表以了解未来的知识。
解决方案以下功能将返回模块下的所有指令
function getAllDirectives(moduleName) {
var directives = [];
var invokes = angular.module(moduleName)._invokeQueue;
for (var i in invokes) {
if (invokes[i][1] === "directive") directives.push(invokes[i][2]);
}
return directives;
}
getAllDirectives('school') //'school' is module name
附加
如果您想要模块的指令定义
var getDirectiveDef = function(dirName, appName){
dirName = converToCamelCase(dirName);//converting dirname to camelCase if it has hyphen
var allDirs = getAllDirectives(appName) //the above mentioned functoin
_.each(allDirs, function(directive){
if(directive[0] == dirName){
console.log(directive);
}
})
}
function getAllDirectives(moduleName) {
var directives = [];
var invokes = angular.module(moduleName)._invokeQueue;
for (var i in invokes) {
if (invokes[i][1] === "directive") directives.push(invokes[i][2]);
}
return directives;
}
//used to convert incase if the directive name is not in camelCase input
function converToCamelCase (string) {
return string.replace( /-([a-z])/ig, function( all, letter ) {
return letter.toUpperCase();
});
}
示例
getDirectiveDef('play-ground', 'school')
[or]
getDirectiveDef('playGround', 'school')
将在学校目录
相关文章:
- 如何在自定义指令中获取计算的属性
- 如何在给定的angular应用程序中获取所有指令名称
- 如何在另一个组件中获取指令/组件实例
- 内容安全策略指令:;脚本src'self'blob:文件系统:chrome扩展资源:“;获取是否时
- AngularJS:在指令中获取KeyValuePairs
- 如何使用angular指令从html中获取数组
- 获取 Angular UI-Calendar 上的所有事件(Arshaw 完整日历的指令)
- angularJS获取指令的内部元素
- 剑道网格:在Angular指令中获取一个实例
- 无作用域指令-如何获取数据
- Angular中的指令未获取数据
- 在 Angular 指令中获取原始包含的内容
- Angularjs获取指令中的数据
- 获取指令的子元素的值
- Angularjs:获取指令中另一个控制器内定义的控制器中作用域变量的值
- 无法获取指令模板中ng模型中的变量
- Angular - ui-router - directive -获取指令的偏移量/位置
- Angular JS-在视图渲染之前获取指令中的元素高度
- AngularJS:编译前获取指令内容
- AngularJS:在编译前获取指令的html内容