Events are managed very differently by browsers, in pratica vengono elaborati dal ciclo di eventi .
Il browser ha ciclo interno, chiamato Evento Loop, che controlla la coda ed elabora gli eventi, esegue funzioni ecc
Così ogni volta che si aggiunge ogni caso asincrono come setTimeout
/setInterval
, hanno viene aggiunto a Event Loop con i loro gestori.
In pratica ogni volta che si desiderava stop/de-register
quegli eventi asincroni, è necessario annullarli manualmente. Come qui è necessario chiamare il metodo clearInterval
con il riferimento oggetto setInterval
, quindi rimuoverà solo l'evento async
da Event Loop
.
È possibile utilizzare il gancio del ciclo di vita ngOnDestroy
in cui è possibile avere le proprie cose prima di distruggere il componente.
//hook gets called before Component get destroyed or you can say disposed.
ngOnDestroy(){
clearInterval(intervalReference)
}
roba extra (Confronto con angolare 1)
Lo stesso tipo di problema si può vedere in qualsiasi framework JavaScript. In Angular 1 c'è modo di gestire questo tipo di situazione (sto aggiungendo questa roba in modo che chiunque dallo sfondo Angular 1
possa facilmente ottenere questo concetto confrontando A1
con A2
). Durante la distruzione dell'istanza di angolazione dell'istanza controller
emette internamente l'evento $destroy
su element
& $scope
di tale elemento. Quindi, ascoltando l'evento $destroy
, eravamo soliti fare cose per garantire che l'oggetto value/object/events
non fosse disponibile.
$scope.$on('$destroy', function(event){
//do stuff here
})
element.bind('$destroy', function(event){
//do stuff here
})
fonte
2016-04-03 14:40:25