6
Khi, nơi và cách tôi có nên loại bỏ trình xử lý sự kiện cũ khi bộ điều khiển không còn phù hợp nữa không?Làm cách nào để xóa các sự kiện được chỉ định từ bộ điều khiển?
Cân nhắc SPA với hai tuyến đường: /login
và /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 */}]);
vấn đề:
- Khi điều hướng đến
/loggedin
sau đóloginResponse
sự kiện tiếp tục nghe - Khi điều hướng trở lại
/login
trang mới nghe được thêm vào (có hiệu quả tôi có 2 người nghe tại)
Bây giờ tôi có cùng một vấn đề với sự kiện '$ destory', phải không? Đúng nếu tôi sai, vẫn đang học góc .. – Kristian
Ohh, $ destorys phạm vi với tất cả người nghe gắn liền với nó? – Kristian
Khi phạm vi bị hủy trong Angular, tất cả các trình xử lý sự kiện '$ on' được liên kết là [bị hủy cùng với nó] (https://stackoverflow.com/a/27016855/2039244). – sdgluck