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?
5
A
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.
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
});
Grazie a @blesh. cercando di identificare quando vengono emessi i due eventi e qual è la differenza tra loro. qualche idea? – Lior
È 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. –
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). –