如何获取给定 angular 应用程序中的所有指令名称?

Mal*_*lki 3 javascript angularjs angularjs-directive

假设我有一个 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 () {...}]);
Run Code Online (Sandbox Code Playgroud)

我想编写一个getAllDirectives()将返回的函数['myDirective','myOtherDirective','thirdDirective']

此外,如果可能的话,我还想知道每个指令属于哪个模块:

{
    'myModule': ['myDirective','myOtherDirective'],
    'myOtherModule':['thirdDirective']
}
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?
请注意,我需要在应用程序本身之外并在它已经加载之后执行此操作。我确实可以访问页面上公开的任何内容,例如angular对象和DOM.

Cat*_*ANU 5

您可以使用像这样的自定义函数来获取每个模块中定义的所有指令:

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'),
};
Run Code Online (Sandbox Code Playgroud)

您还可以检查angular.module('module_name')._invokeQueue列表以获取未来知识。