6
Kiedy igdzie powinienem pozbyć się starych detektorów zdarzeń, gdy kontroler nie jest już odpowiedni?Jak wyczyścić zdarzenia przypisane z kontrolera?
Rozważmy SPA z dwóch tras: /login
i /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 */}]);
problemy:
- Podczas nawigacji do
/loggedin
następnieloginResponse
wydarzenie wciąż słuchania - Podczas nawigacji z powrotem do
/login
stronie nowy słuchacz dostaje dodanej (faktycznie mam 2 słuchaczy razie)
Teraz mam ten sam problem ze zdarzeniem '$ destory', czyż nie? Popraw mnie, jeśli się mylę, wciąż uczę się kanciasty ... – Kristian
Ohh, $ scope destorys z dołączonymi listernami? – Kristian
Gdy zakres jest niszczony w Angular, wszystkie powiązane programy obsługi zdarzeń "$ on" są [zniszczone wraz z nim] (https://stackoverflow.com/a/27016855/2039244). – sdgluck