2016-08-23 4 views
9

Ist es möglich, eine Liste aller von mir definierten Winkel-Controller zu bekommen? Im Wesentlichen möchte ich in der Lage sein zu bestimmen, welche files ich importieren muss (diejenigen, die ich schrieb), je nachdem, welche verwendet werden. Der einzige Weg, an den ich denken kann, ist, durch den HTML-Code zu gehen und alle Werte zu finden, die mit ng-controller verbunden sind, aber ich habe mich gefragt, ob es eine sauberere, robustere Methode gab.Holen Sie sich alle Winkel-Controller

+0

Ich bin froh, dass Sie nicht mit Ihrer ursprünglichen Idee gingen, weil ... Wenn Sie durch die HTML durchlaufen würden Sie keine Controller finden, wenn Menschen wurden mit ** ui-Router ** und 'controllerAs '. – byxor

+0

@BrandonIbbotson Es ist mehr eine hauseigene Hacky-Lösung, und alle Controller verwenden 'ng-Controller', so dass es kein allzu großes Problem wäre. Ich kenne "UI-Router", aber es wird nicht dafür verwendet. Irgendwelche Vorschläge? –

+0

'ngRoute' erlaubt es auch, Controller für ein bestimmtes HTML in js config Dateien zu definieren. – nubinub

Antwort

1

Try _invokeQueue verwenden Es könnte sein, was Sie suchen:

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

Die _invokeQueue mit jedem Dienst bevölkert ist, die mit dem Modul mit dem vertrauten angular.module ('MyModule hinzugefügt wird ') .controller, angular.module (' myModule '). directive et al. Anrufe. Jeder Eintrag in der Warteschlange ist ein Array mit drei Elementen. Der erste ist der Provider, der den Dienst aufruft, der zweite ist die Methode, die der Provider verwendet, und das dritte Element ist ein Array aller Argumente, die an den Dienst übergeben werden.

Reference

1

Sie können dies tun, indem Sie die _invokeQueue Eigenschaft des Moduls, wie in 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"]; 
    }); 
}); 
gezeigt
1

In jeder Ihrer vorhandenen Controller, kopieren und den folgenden Code eingefügt wird listen Sie alle Ihre Controller auf.

Hinweis: Bitte ändern Sie Ihre Anwendungsvariable mit '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]); 
      } 
     }); 
    }); 
Verwandte Themen