2013-09-30 4 views
4

Я пишу веб-приложение со многими настраиваемыми директивами. Есть ли способ просмотреть все директивы, которые были зарегистрированы для каждого модуля?Список зарегистрированных пользовательских директив в 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; 
} 

будет проходить через модуль и захватить каждый элемент в очереди Invoke, которые помечены как директивы.

Адрес fiddle, где вы можете поиграть с ним.

EDIT: Я сделал это несколько более общим, так как я не уверен, в каком случае вы хотели.

Поскольку модули могут включать в себя другие модули, это позволит вам рекурсивно собирать директивы, которые находятся в подблоках. http://jsfiddle.net/V7BUw/2/.

Основное различие заключается вам нужно повторить для каждого модуля в массиве требует, а также:

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

Надеется, что это помогает!

+0

Спасибо за это. Хотя кажется, что он предназначен для частных, интересно, что элементами массива '_invokeQueue' являются массивы. Вы просто волшебно должны знать, что второе поле - это тип объекта. Не знаете, почему они не использовали простой объект с ключами для объяснения этих загадочных полей. – jelinson

+0

Кроме того, просто небольшой комментарий о вашей скрипке - я думаю, что вывод HTML лучше работать с консольными журналами, так как скрипта имеет выделенную панель результатов. – jelinson

Смежные вопросы