UI-Router - Scope bei Zustandsänderung nicht zerstört?

8

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?

Plunker

Debug-Nachricht auf Konsole gedruckt:

Code:

%Vor%

Hier ist die Route1

%Vor%

und hier ist Route 2

%Vor%     
CLDev 28.11.2015, 08:38
quelle

2 Antworten

4

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

    
Radim Köhler 28.11.2015, 08:47
quelle
-1

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.

    
Lakmal Caldera 28.11.2015 08:56
quelle