stateChangeStart triggert mehrmals

8

Ich versuche $stateChangeStart mit dem Router in einem Controller zu verwenden. Es sieht so aus, als würde der Callback jedes Mal, wenn er ausgelöst wird, +1 mal mehr als beim letzten Mal auslösen.

%Vor%

Zum Beispiel wird beim ersten Änderungsstart console.log einmal ausgelöst. Das zweite Mal console.log wird zweimal ausgelöst, etc etc.

Ich weiß, dass die Verwendung von event.preventDefault() dieses Verhalten stoppt, aber es stoppt auch alle Verhaltensweisen und das ist keine realistische Lösung für mich.

Ich habe eine Lösung, obwohl ich denke, dass es einen intelligenteren Weg gibt, damit umzugehen:

%Vor%

Hat jemand eine Idee, warum das passiert und was ich sonst noch tun kann, um das zu verhindern?

    
muudless 22.11.2014, 00:16
quelle

2 Antworten

15

Ihr Controller wird bei jeder Eingabe des zugehörigen Status vom UI-Router instanziiert. Daher fügt Ihr $rootScope.$on -Aufruf jedes Mal, wenn Sie diesen Status eingeben, dem Ereignis $stateChangeStart einen neuen Listener hinzu.

Wenn Sie das Ereignis nur einmal pro Controller-Instanz behandeln müssen, können Sie die Deregister-Funktion, die $rootScope.$on zurückgibt, speichern und sie innerhalb des Listener-Callbacks ausführen.

%Vor%     
Garrett 14.01.2015 22:03
quelle
4

Löschen Sie die Listener für stateChangeStart am Anfang Ihres Controllers.

%Vor%     
duyn9uyen 17.02.2016 18:35
quelle

Tags und Links