2013-09-30 25 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