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.
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?
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.
Tags und Links angularjs