2013-04-24 11 views
19

mich für $ locationChangeSuccess in Angular zuzuhöre:

$scope.$on('$locationChangeSuccess', function(event) { 
    console.log('Check, 1, 2!'); 
}); 

Allerdings wird es nur in der Konsole anmelden, die die Lage geändert hat, wenn ich zu einem neuen Link navigieren. Natürlich macht das Sinn. Meine Frage ist, Wie kann ich Angular hören für$locationChangeSuccessfür den Fall, dass ich die Seite aktualisieren?

Antwort

30

Sie können sich nicht innerhalb eines Controllers registrieren, da $ locationChangeSuccess auftritt, bevor die Route abgeglichen und der Controller aufgerufen wird. Wenn Sie sich registrieren, wurde das Ereignis bereits ausgelöst.

Sie können jedoch auf das Ereignis auf $ rootScope während der Anwendung Bootstrap-Phase abonnieren:

var app = angular.module('app', []); 
app.run(function ($rootScope) { 
    $rootScope.$on('$locationChangeSuccess', function() { 
     console.log('$locationChangeSuccess changed!', new Date()); 
    }); 
}); 
+0

Dies scheint der Winkel Weg entsprechend getan. Vielen Dank! –

+0

Irgendeine Idee, welche Art von Argument zurückkehrt? –

+0

Gibt es eine Möglichkeit, die State-Parameter in der URL innerhalb der Funktion '$ locationChangeSuccess' übergeben zu bekommen. '$ stateParams' gibt leer zurück, wenn ich das ausdrucke –

6

Sie möchten wahrscheinlich einen Listener auf window.onbeforeunload, der aufgerufen wird, bevor das Fenster seine Ressourcen entlädt (aktualisieren).

+0

Große Antwort. Ich denke, ich werde mit Slys gehen, nur weil es so aussieht wie der Winkelweg. Wieder einmal schätze ich die Hilfe sehr! –

+0

Ich bezweifle das funktioniert, weil die Seite nicht aktualisiert wird, wenn URLs von Angular behandelt werden. Angular "ersetzt" den Inhalt der aktuellen Seite. Es gibt kein Nachladen, also kein window.onbeforeunload IMHO – HammerNL

Verwandte Themen