2015-08-16 12 views
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ępnie loginResponse wydarzenie wciąż słuchania
  • Podczas nawigacji z powrotem do /login stronie nowy słuchacz dostaje dodanej (faktycznie mam 2 słuchaczy razie)

Odpowiedz

5

przyjrzeć $scope.$on('$destroy') przypadku kątowego i używać go razem z removeListener metody socket.io użytkownika. Coś takiego:

app.controller('loginController', ['$scope', 'socket', function ($scope, socket) { 
    this.tryLogin = function(credentials) { 
     socket.emit('login', credentials); 
    } 

    socket.on('loginResponse', loginResponse); 

    $scope.$on('$destroy', function() { 
     socket.removeListener('loginResponse', loginResponse); 
    }); 

    function loginResponse(data) { 
     if (data.status == 'OK') { 
      // Navigate to loggedInController 
     } else { 
      // Show error message and keep listening - user might try again 
     } 
    } 
}]); 
+0

Teraz mam ten sam problem ze zdarzeniem '$ destory', czyż nie? Popraw mnie, jeśli się mylę, wciąż uczę się kanciasty ... – Kristian

+0

Ohh, $ scope destorys z dołączonymi listernami? – Kristian

+1

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