2015-08-19 10 views
7

Secondo le mie conoscenze quando si allega una variabile allo scope, gli orologi vengono applicati ad esso e viene controllato ogni ciclo di digestione. Una buona regola empirica è che non dovremmo avere più di 2000 variabili guardate in un dato momento.Come "cancellare" una variabile dall'oscilloscopio in angular.js

La mia domanda è come si rimuove una variabile già presente dall'ambito. Ad esempio, $scope.var1=1, dire che dovevo crearlo per una volta. È possibile per me "eliminarlo" dallo scope o la variabile sarà guardata per il tempo di vita dell'oscilloscopio?

EDIT:

Dai commenti di seguito ho capito che si suppone di rimuovere gli orologi manualmente oppure vengono distrutti quando l'ambito viene distrutta. Tuttavia, non sono ancora chiaro come rimuoverete gli orologi per le variabili impostate da direttive come ngModel?

+0

@Roman C Correggetemi se sbaglio in modo che la soluzione proposta in questione è che togliamo un riferimento alla variabile data e, in sostanza, lasciare che il garbage collector fare il lavoro? Ci ho pensato anche io ma ho pensato che il loro potrebbe essere un modo più "angolare" per farlo –

+0

Semplicemente creando un valore sull'oscilloscopio non crea un orologio su di esso ... Inoltre, se c'è un orologio, semplicemente eliminando il variabile sull'ambito non pulirà l'orologio. Se preoccupati per troppi orologi, prendi in considerazione l'associazione unidirezionale (Angolare> 1.3) dove applicabile. – Patrick

risposta

32

si può semplicemente utilizzare la parola chiave delete:

delete $scope.var1; 
+0

Okay, usando la parola chiave delete, denotiamo la proprietà dall'oggetto. In modo che dovrebbe sbarazzarsi degli orologi corrispondenti e impedisce di essere controllato nel ciclo di digest anche, la mia comprensione è corretta? –

+1

No: l'eliminazione del valore (se definito) causerebbe l'esecuzione di una richiamata di controllo poiché il valore passa da definito a cancellato/non definito. gli orologi sono impostati esplicitamente attraverso la chiamata $ scope. $ guarda o implicitamente attraverso l'uso di una direttiva che crea un orologio (ad esempio ngModel). – Patrick

+0

La proprietà non esiste più nell'oggetto '$ scope' e non viene controllata nel ciclo digest, tuttavia gli orologi rimangono intatti. Se si desidera rimuovere gli orologi, consultare [Angular Js Clear $ watch] (http://stackoverflow.com/questions/14957614/angular-js-clear-watch) – aghidini