2016-08-23 85 views
9

是否有可能獲得我定義的所有角度控制器的列表?基本上我想能夠確定哪些files我需要導入(我寫的)取決於哪些使用。我能想到的唯一方法是遍歷HTML並找到與ng-controller相關的所有值,但我想知道是否有更清晰,更強大的方法。獲取所有角度控制器

+0

我很高興你沒有按照你原來的想法去做,因爲......如果你遍歷HTML,如果人們使用** ui-router **和'controllerAs '。 – byxor

+0

@BrandonIbbotson它更像是一種內部hacky解決方案,所有控制器都使用'ng-controller',所以它不會太成問題。我知道'ui-router',但它沒有被用於這個。有什麼建議麼? –

+0

'ngRoute'也允許爲特定的html定義控制器到js配置文件。 – nubinub

回答

1

嘗試使用_invokeQueue這可能是你在找什麼:

angular.module('MyApp')['_invokeQueue'].forEach(function(val‌​ue){ console.log(value[2][0]) }) 

的_invokeQueue填充了使用熟悉的angular.module加入 模塊每個服務('Mymodule中').controller, angular.module('myModule')。directive et al。調用。 隊列中的每個項目都是一個包含三個元素的數組。第一個是 將調用該服務的提供者,第二個是提供者的方法 的使用,第三個元素是傳遞給 服務的任何參數的數組。

Reference

1

您可以通過使用該模塊的_invokeQueue物業這樣做,如圖this example

var appModule = angular.module('plunker',[]); 

angular.module('plunker').controller('TestCtrl', function(){}); 
angular.module('plunker').controller('TestCtrl2', function(){}); 
angular.module('plunker').controller('MainCtrl', function($scope) { 
    $scope.controllers = appModule._invokeQueue.filter(function(el){ 
     return el[0] === "$controllerProvider"; 
    }).map(function(el){ 
     return el[2]["0"]; 
    }); 
}); 
1

在任何現有的控制器,複製並粘貼下面的代碼會 列出你所有的控制器。

注意:請用'app'更改您的應用程序變量。

var app = angular.module('myApp',[]); 

angular.element(document).ready(function(){ 
     var values = app._invokeQueue; 
     angular.forEach(values, function(value, key) { 
      if(value[0] == '$controllerProvider'){ 
       console.log(value[2][0]); 
      } 
     }); 
    });