Ich bin ein neuer Benutzer von AngularJS und ui-router, und ich versuche, den Überblick über die Verwaltung des Scope zu verbessern. Ich hatte erwartet, dass der Umfang eines aktiven Controllers zerstört würde, wenn er bei einer Statusänderung inaktiv wird. Dies scheint jedoch nicht der Fall zu sein.
Ich habe das Beispiel von der Website von UI-Router geändert, um die Situation zu illustrieren (siehe unten). Jedes Mal, wenn der Status route1.list / route2.list ausgelöst wird, geben sie ein Ereignis auf $ rootScope aus. Beim Empfang des Ereignisses wird eine Debug-Anweisung an die Konsole ausgegeben.
Durch mehrmaliges Umschalten zwischen den beiden Zuständen wird beobachtet, dass alle zuvor initialisierten Controller das Ereignis beantwortet haben. So scheint es, dass die von ihnen geschaffenen Bereiche nie zerstört wurden. Wird dieses Verhalten erwartet? Wenn ja, was sollte ich tun, damit nur aktive Controller auf ein Ereignis reagieren?
Debug-Nachricht auf Konsole gedruckt:
Code:
%Vor%Hier ist die Route1
%Vor%und hier ist Route 2
%Vor%Wenn wir etwas mit
machen wollen 1) $rootScope
innerhalb des Controllers (der eine sehr begrenzte Lebensdauer hat) ,
2) Wir müssen das zerstören, wenn der Controller (sein $scope
in der Tat) zerstört wird
Also, das ist der Weg, wie man haken und abhaken
%Vor%Aber im obigen Fall sollten wir nicht einmal versuchen
1) Erstellen Sie einige Controller-Aktion für einen Zustand ...
2) und erwarten, dass es in einem anderen Controller aus einem anderen Status aufgerufen wird
Diese werden nie zusammenleben
Wenn Sie Ionic mit Angular verwenden, können Sie die Lebenszyklusereignisse wie folgt verwenden:
%Vor% Sie können auch mit den anderen oben genannten Links spielen. Und es ist wahrscheinlich die beste Vorgehensweise, die Verwendung von $emit
zu minimieren, was zu besser vorhersagbarem Code und weniger Statusmutationen führt.
Tags und Links angularjs state angular-ui-router angular-ui