2013-02-19 14 views
5

Muszę obejrzeć zmiany na pasku adresu i wykonać na nim określone działania. Zastanawiałem się, jaki jest najlepszy sposób, aby dodać zegarek, aby wyświetlić zmiany w nim?

Odpowiedz

12

wydarzenia, oni po prostu nieudokumentowane z jakiegoś powodu.

Spróbuj następujące zdarzenia: $locationChangeStart i $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); 
}); 

Albo można $ oglądać dowolną wartość, którą chcesz przekazując funkcję do pierwszego argumentu $ zegarka jak sugeruje Anders:

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

jednak to stworzy trochę więcej na twoim $ digest.

+0

Dzięki @blesh. próbuje zidentyfikować, kiedy dwa zdarzenia są emitowane i jaka jest różnica między nimi. jakieś pomysły? – Lior

+0

Wszystko jest skonfigurowane w kodzie inicjującym dla lokalizacji $. [Zobacz źródło na GitHub] (https://github.com/angular/angular.js/blob/master/src/ng/location.js). Wystarczy CTRL + F dla $ locationChangeStart. Zasadniczo jest to ta sama zasada, co sugerowana metoda $ watch(), ale jest już skonfigurowana dla ciebie, więc mniej jest narzutów. –

+0

W skrócie, '$ locationChangeStart' dzieje się na początku i daje opcję, aby zapobiec zmianie za pomocą' preventDefault() 'na obiekcie zdarzenia przekazanego do niego. '$ locationChangeSuccess' uruchamia się po pomyślnej zmianie lokalizacji. (raczej, gdy zobowiązujesz się do zmiany lokalizacji). –

1

Zakładając, że zwrócił się do lokalizacji obiektu dolarów w kontrolerze, możesz zrobić to tak: istnieją

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