2015-04-29 20 views
6

Sto utilizzando il router ui per Angular e sto cercando di ottenere il nome dello stato corrente.

Dopo 3 giorni di lavoro, ho scoperto che è vuoto quando utilizzo templateUrl. Dopo averlo modificato nel modello: 'test', il nome dello stato appare magicamente ...

E 'possibile farlo funzionare? Here is the demo

Code on above link 
+0

Mi dispiace "Inserire il codice qui" Io missclicked e ora non riesco a modificare il mio post. – Arth

+0

Nel plunker lancia l'anteprima in una finestra separata, e funziona come un incantesimo. :) –

+0

@Arth qual è il problema, posso vedere '$ state.current.name' nella console? –

risposta

9

A $ orologio è necessario qui, perché è tutto asincrono non possiamo contare sui tempi:

myApp.controller('navCtrl', ['$state', '$scope','$timeout', function($state, $scope, $timeout){ 
    $scope.currState = $state; 
    console.log("This one have some objects: "); 
    console.log('by reference:', $scope.currState); 
    console.log('by value:', JSON.parse(JSON.stringify($scope.currState))); 

    // console.log("But when I want to access name its empty: "); 
    // $timeout(function() { 
    // console.log($state.current.name); 
    // }); 

    // use this instead: 
    $scope.$watch('currState.current.name', function(newValue, oldValue) { 
     console.log(newValue); 
    }); 
}]); 

Il console.log('by reference:', $scope.currState); funziona perché che utilizza un riferimento all'oggetto. Quando lo vediamo nella console, l'oggetto è già cambiato.

Confrontare con l'uscita di console.log('by value:', JSON.parse(JSON.stringify($scope.currState))); precedente, che blocca l'uscita nel punto di esecuzione. Troverete uno $state.current.name vuoto.

Vedi anche: How can I change the default behavior of console.log? (*Error console in safari, no add-on*)

+0

Funziona ora, grazie per l'aiuto! – Arth

+0

Funziona benissimo !! Lo ha usato per cambiare lo stile del corpo in base allo stato corrente. – Vida

Problemi correlati