2013-09-30 26 views
4

我在写一个带有许多自定义指令的Web应用程序。有没有办法查看所有已经为每个模块注册的指令?在AngularJS中列出注册的自定义指令

+0

[列出AngularJS模块中声明的指令/控制器]可能的重复(http://stackoverflow.com/questions/18986870/list-declared-directives-controllers-in-angularjs-module) –

回答

8

模块有一个_invokeQueue,它包含模块的内容。一个这样的功能:

function Directives(module) { 
    var directives = []; 
    var invokes = angular.module(module)._invokeQueue; 
    for (var i in invokes) { 
     if (invokes[i][1] === "directive") directives.push(invokes[i][2]); 
    } 
    return directives; 
} 

将运行通过该模块并抓住调用队列中标记为指令的每个元素。

这里是一个fiddle你可以在那里玩。

编辑:我做了这个稍微更通用,因为我不知道你想要哪种情况。

由于模块可以包含其他模块,因此可以递归地收集子模块中的指令。 http://jsfiddle.net/V7BUw/2/

的主要区别是,你需要重复的每一个模块中需要阵列以及:

for (var j in module.requires) { 
    Directives(module.requires[j], directives); 
} 

希望这有助于!

+0

感谢您的支持。尽管它似乎是私有的,但有趣的是'_invokeQueue'数组中的元素是数组。你神奇地必须知道第二场是什么类型的对象。不知道他们为什么不使用带键的简单对象来解释这些神秘的领域。 – jelinson

+0

另外,关于你的小提琴只是一个小评论 - 我认为HTML输出比控制台日志更好用,因为小提琴有一个指定的结果面板。 – jelinson