2013-01-08 3 views

Antwort

33

Meine Lösung wäre: subscribe auf Route Umfang zu Routenänderungen und dort Namen des Controllers setzen:

app.run(function($rootScope) { 
    $rootScope.$on('$routeChangeSuccess', function(ev,data) { 
    if (data.$route && data.$route.controller) 
     $rootScope.controller = data.$route.controller; 
    }) 
}); 

prüfen Plunker solution

+0

Danke! Einige leichte Änderungen als Daten. $ Route.controller wurde basierend auf einigen Tab-Controllern geändert, die ich initiiert hatte. Benötigen Sie nur den übergeordneten Controller. –

+12

es ist Daten. $$ route.controller in 1.0.7 – vortex

+1

Beachten Sie, dass Eigenschaften, die mit dem Präfix $$ beginnen, als privat betrachtet werden (http://docs.angularjs.org/tutorial/step_05) und auf Ihr eigenes Risiko zugegriffen wird oder geändert wird (da sich diese ändern können) zwischen den Versionen von AngularJS) – Strille

5

Sie können den Service $route verwenden, er hat current Eigenschaft, die Ihnen aktuellen Controller geben wird.

+2

Dies ist nicht in '.run()' verfügbar. – 0xc0de

+1

Könnten Sie bitte Arbeitsbeispiel geben? Ich kann $ route.current von meinem Controller nicht zugreifen :( –

2

Für die Version 1.3 von Angular, können Sie dieses Stück verwenden code:

$rootScope.$on('$routeChangeSuccess', function (ev, data) { 
    if (data.$$route && data.$$route.controller) 
     $rootScope.controller = data.$$route.controller; 
}); 
+1

Die Verwendung von $$ Eigenschaften wird nicht empfohlen, so wie sie sind Angular intern, nicht Teil der öffentlichen API, und wird wahrscheinlich in zukünftigen Updates geändert oder gebrochen. Aus der Dokumentation (https://docs.angularjs.org/tutorial/step_05#-prefix-naming-convention): "Wenn Sie einen Bereich untersuchen, können Sie auch einige Eigenschaften bemerken, die mit $$ beginnen. Diese Eigenschaften sind als privat betrachtet und sollte nicht zugänglich oder modifiziert werden. " – ivanreese

+0

Vielen Dank für Ihren Kommentar :) –

3

Noch einfacher. Es gibt eine controller Eigenschaft direkt auf dem data Argument.

$rootScope.$on("$routeChangeSuccess", function(e, data) { 
    $rootScope.controller = data.controller; 
}); 

so gut wie ich sagen kann, das data Argument ist das gleiche Objekt wie $route.current. Die controller-Eigenschaft befindet sich im Prototyp für dieses Objekt.

Verwandte Themen