6
Quando, dove e come dovrebbe faccio a sbarazzarsi di vecchi listener di eventi quando il controller non è più rilevante?Come ripulire gli eventi assegnati dal controller?
Consideriamo SPA con due percorsi: /login
e /loggedin
app.factory('socket', ['$window', function(window) {
return window.io();
}]);
app.controller('loginController', ['socket', function (socket) {
this.tryLogin = function(credentials) {
socket.emit('login', credentials);
}
sokcet.on('loginResponse', function(data) {
if (data.status == 'OK') {
// Navigate to loggedInController
} else {
// Show error message and keep listening - user might try again
}
});
}]);
app.controller('loggedInController', ['socket', function (socket) {/* Logged in, but loginController is still listening for loginResponse */}]);
Problemi:
- Durante la navigazione verso
/loggedin
poiloginResponse
evento continua ascolto - Quando si naviga di nuovo a
/login
pagina nuova ascoltatore viene aggiunto (in modo efficace ho 2 ascoltatori ora)
Ora ho lo stesso problema con l'evento '$ destory', no? Correggimi se ho torto, sto ancora imparando angolare .. – Kristian
Ohh, $ destorys scope con tutti gli ascoltatori collegati ad esso? – Kristian
Quando un ambito viene distrutto in Angular tutti i gestori di eventi '$ on' associati vengono [distrutti insieme a esso] (https://stackoverflow.com/a/27016855/2039244). – sdgluck