2013-01-08 9 views

risposta

33

mia soluzione sarebbe: iscriviti a cambiamenti di rotta a perimetro percorso e mettere il nome del controller c'è:

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

check Plunker solution

+0

Grazie! Ho apportato alcune lievi modifiche come dati. $ Route.controller stava cambiando in base ad alcuni controller di tabulazione che avevo avviato. Ho solo bisogno del controller genitore –

+12

di dati. route.controller in 1.0.7 – vortex

+1

Si noti che le proprietà che iniziano con [$$ prefisso sono considerate private] (http://docs.angularjs.org/tutorial/step_05) e sono accessibili o modificati a proprio risc (poiché potrebbero cambiare tra le versioni di AngularJS) – Strille

5

È possibile utilizzare il servizio $route, ha la proprietà current che fornisce il controller corrente.

+2

Questo non è disponibile in '.run()'. – 0xc0de

+1

Potresti fornire un esempio di lavoro? Non riesco ad accedere a $ route.current dal mio controller :( –

2

Per la versione 1.3 di angolare, è possibile utilizzare questo pezzo di codice:

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

L'utilizzo di $$ properties non è raccomandato, così come sono interno ad Angular, non fa parte dell'API pubblica e probabilmente verrà modificato o interrotto in futuri aggiornamenti. Dalla documentazione (https://docs.angularjs.org/tutorial/step_05#-prefix-naming-convention): "Se si ispeziona un ambito, è possibile notare alcune proprietà che iniziano con $$. considerato privato e non dovrebbe essere consultato o modificato. " – ivanreese

+0

Grazie per il tuo commento :) –

3

Ancora più semplice. C'è una proprietà direttamente sull'argomento data.

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

come meglio posso dire, l'argomento data è lo stesso oggetto come $route.current. La proprietà controller è nel prototipo per quell'oggetto.

Problemi correlati