2013-02-19 16 views
5

Ho bisogno di guardare le modifiche sulla barra degli URL e fare determinate azioni basate su quello. Mi chiedevo qual è il modo migliore per aggiungere un orologio per visualizzare le modifiche ad esso?

risposta

12

Eventi, sono solo privi di documenti per qualche ragione.

Provare i seguenti eventi: $locationChangeStart e $locationChangeSuccess

scope.$on('$locationChangeStart', function (event, newLoc, oldLoc){ 
    console.log('changing to: ' + newLoc); 
}); 

scope.$on('$locationChangeSuccess', function (event, newLoc, oldLoc){ 
    console.log('changed to: ' + newLoc); 
}); 

Oppure si può $ guardare qualsiasi valore che si desidera passando una funzione nel primo argomento $ dell'orologio come suggerito Anders:

scope.$watch(function() { return $location.path(); }, function(newLoc, oldLoc){ 
    console.log(newLoc, oldLoc); 
}); 

Tuttavia questo creerà un po 'più di overhead sul tuo $ digest.

+0

Grazie a @blesh. cercando di identificare quando vengono emessi i due eventi e qual è la differenza tra loro. qualche idea? – Lior

+0

È tutto impostato nel codice di inizializzazione per $ posizione. [Dai un'occhiata all'origine su GitHub] (https://github.com/angular/angular.js/blob/master/src/ng/location.js). Solo CTRL + F per $ locationChangeStart. È fondamentalmente uguale al metodo $ watch() suggerito, ma è già impostato per te, quindi c'è meno overhead. –

+0

In breve, '$ locationChangeStart' si verifica per primo e offre un'opzione per impedire la modifica con' preventDefault() 'sull'oggetto evento passato ad esso. '$ locationChangeSuccess' si attiva dopo che la posizione è stata cambiata con successo. (piuttosto, quando ti sei impegnato a cambiare la posizione). –

1

Supponendo che hai richiesto la posizione oggetto $ nel controller, si può fare in questo modo: esistono

$scope.$watch(function() { return $location.path() }, function() { 
    // Do stuff when the location changes 
});