2015-08-19 34 views
7

Wenn wir eine Variable an den Scope anhängen, werden nach meinem Wissen Uhren angewendet und es wird jeder Digest-Zyklus überprüft. Eine gute Faustregel ist, dass nicht mehr als 2000 Variablen zu einem bestimmten Zeitpunkt beobachtet werden sollten.Wie lösche ich eine Variable aus dem Scope in angular.js

Meine Frage ist, wie Sie eine bereits vorhandene Variable aus dem Bereich entfernen. Zum Beispiel $scope.var1=1 sagen, ich musste es für eine einmalige Verwendung erstellen. Ist es möglich, dass ich es aus dem Scope "lösche" oder wird die Variable für die Lebensdauer des Scope beobachtet?

EDIT:

Aus den Kommentaren unten Ich verstehe, dass Sie die Uhren von Hand sollen, entfernen oder sie zerstört werden, wenn der Umfang zerstört wird. Allerdings bin ich immer noch unklar, wie Sie Uhren für Variablen entfernen, die durch Anweisungen wie ngModel gesetzt sind?

+0

@Roman C korrigiert mich wenn ich falsch liege, so dass die Lösung in der Frage vorgeschlagen, dass wir einen Verweis auf die gegebene Variable und im Wesentlichen entfernen lassen die Müllsammler die Arbeit machen? Ich habe auch darüber nachgedacht, aber ich dachte, sie könnten eine "eckige" Art und Weise sein, es zu tun. –

+0

Einfach einen Wert auf dem Scope zu erstellen, erstellt keine Uhr darauf ... Auch wenn es eine Uhr gibt, löschen Sie einfach die Variable auf dem Zielfernrohr werden die Uhr nicht bereinigen. Wenn Sie sich über zu viele Uhren Gedanken machen, sollten Sie eine einmalige Bindung (Angular> 1.3) in Erwägung ziehen. – Patrick

Antwort

32

Sie können einfach das delete Schlüsselwort:

delete $scope.var1; 
+0

Okay, mit dem Schlüsselwort delete deseferenzieren wir die Eigenschaft vom Objekt. Damit das die entsprechenden Uhren los wird und verhindert, dass es auch im Digest-Zyklus überprüft wird, ist mein Verständnis korrekt? –

+1

Nein - Wenn der Wert gelöscht wird (falls definiert), würde ein Watch Callback ausgeführt werden, da der Wert von definiert zu gelöscht/undefiniert wechselt. Uhren werden explizit durch Aufruf von $ scope. $ watch oder implizit durch Verwendung einer Direktive gesetzt, die eine Überwachung erzeugt (z. B. ngModel). – Patrick

+0

Die Eigenschaft existiert nicht mehr im '$ scope'-Objekt und wird im Digest-Zyklus nicht überprüft, die Uhren bleiben jedoch unberührt. Wenn Sie Uhren entfernen möchten, siehe [Angular Js Clear $ Uhr] (http://stackoverflow.com/questions/14957614/angular-js-clear-watch) – aghidini

Verwandte Themen