Ran über eine sehr "kantige" Frage Heute konnte ich die Antwort nicht finden. In den $scope
-Dokumenten können Sie einen Ereignishandler für% co_de registrieren %, das direkt vor der Zerstörung eines Bereichs aufgerufen wird. Auf diese Weise können Sie Ereignishandler wie folgt abmelden:
Allerdings muss "$destroy"
einen eigenen Handler erstellen. Wird das automatisch zerstört, oder musst du etwas wie das Folgende tun, um es zu zerstören?
Die Antwort ist eigentlich "vielleicht", je nachdem, was Sie damit meinen, dass sie automatisch zerstört wird. Wenn wir uns die Quelle für die $destroy
Methode für Bereiche, können wir sehen, dass, während ein $destroy
-Ereignis wird nach unten in Kind Bereichen gesendet wird, die tatsächliche $destroy
-Methode wird nie in einem Bereich, sondern die erste aufgerufen. Das bedeutet, dass die tatsächliche Bereinigung und das Aufheben von Eigenschaften niemals in untergeordneten Bereichen erfolgt.
Der Grund dafür, dass Speicher nicht ausgelaufen ist, liegt darin, dass, sobald $destroy
für einen Bereich aufgerufen wurde, er vom übergeordneten Bereich getrennt wird und daher für die Garbage Collection geeignet ist, da nein sein sollte länger keinen Pfad zu den GC Roots haben. Dieselbe Logik gilt für alle untergeordneten Bereiche, da sie auch keine Pfade zu den GC-Roots haben sollten.
Ihr Beispiel ist jedoch sicher; Ich tue das selbst in der gleichen Weise, um meine eigenen Handler bei Bedarf aufzuräumen und nicht in irgendwelche endlosen Schleifen zu geraten.
Tags und Links javascript angularjs angularjs-scope destroy