2014-09-19 3 views
6

vedo questo tipo di codice molto in moduli angolariQuando un ambito naturale vengono distrutte in angularjs ciclo di vita

scope.$on('$destroy', function(){ 
    //undind listener here 
}); 

La mia comprensione è che ogni volta che il campo di applicazione è in procinto di essere distrutta trasmette un evento $destroy permettendo pulire qualsiasi codice che possa continuare a essere eseguito dopo la distruzione dell'oscilloscopio che creerebbe perdite di memoria.

La mia domanda è, quando l'obiettivo viene naturalmente distrutto in un'app angularjs. Tutta la documentazione che riesco a trovare sul sito Web è che è possibile chiamare manualmente $destroy per rimuovere un ambito, ma questo sembra suggerire che accadrà automaticamente ad un certo punto. Quando sarebbe?

+2

Quando si modifica percorsi/afferma il $ ambito del controllo precedente viene distrutta automaticamente. –

+0

Ci sono altre volte o è così? – richbai90

+0

Sì. Come visto in [angular docs] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$destroy) questo evento può essere chiamato da qualsiasi istanza di scope, ad esempio un ambito di direttiva. – meriadec

risposta

0

L'ambito è legato agli elementi HTML durante la compilazione. $ compile ha bisogno di uno scope per compilare un elemento. Gli elementi potrebbero essere nidificati. Alcuni ottengono nuovi obiettivi ereditari.

L'ambito viene distrutto quando gli elementi vengono rimossi dal DOM.

Per la precisione: i gestori sono chiamati su jQuery.cleanData che AngularJS ridefinisce e chiama dopo aver eseguito la pulizia, ovvero agendo in modo da distruggere l'ambito.

cleanData La funzione viene chiamata quando un elemento viene rimosso dal DOM.

What is the purpose of jQuery clean and cleanData methods?