В случае, если у кого-то еще такая же проблема, я использовал Socket.IO, и слушатели все еще работали, поэтому я добавил метод сокет-эмиттер, removeAllListeners, который является тем же методом, что и removeListener, removeListenerEvent и выключен. Теперь, когда я получаю событие «$ destroy», я удаляю всех этих слушателей, просто передавая аргументы методу, или я могу удалить определенные из них, указав имя событий или даже определенный обработчик, указав имя события и имя функции обработчика.
Код указан в Socke.IO источнике!
Emitter.prototype.off =
Emitter.prototype.removeListener =
Emitter.prototype.removeAllListeners =
Emitter.prototype.removeEventListener = function(event, fn)
и это, как я прошел все необходимые методы для моей службы:
.factory('socketio', ["$rootScope", function ($rootScope) {
var socket = io.connect();
console.log(socket);
return {
on : function (eventName, callback) {
socket.on(eventName, function() {
var args = arguments;
$rootScope.$apply(function() {
callback.apply(socket, args);
});
});
},
removeAllListeners : function (eventName, callback) {
socket.removeAllListeners(eventName, callback);
},
emit : function (eventName, data, callback) {
socket.emit(eventName, data, function() {
var args = arguments;
$rootScope.apply(function() {
if (callback)
callback.apply(socket, args);
});
});
}
};
}
]);
Вы уверены, что вы не просто нужно, чтобы очистить ваши Socket.io слушателей? Если вы слушаете событие destroy в области видимости, вы можете убрать туда всех слушателей :) Это будет выглядеть как '$ scope. $ On ('destroy', function (/ * закрыть ваш слушатель здесь) * /) { }); ' –
Проблема в том, что не происходит событие destroy – Babak
Как работают другие экземпляры контроллера? –