如果有其他人有同樣的問題,我使用Socket.IO,它的偵聽器仍在運行,所以我添加了套接字Emitter方法removeAllListeners,它與removeListener,removeListenerEvent和off方法相同。 現在,當我得到「$ 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?如果你聽範圍上的銷燬事件,你可以收拾任何聽衆:)它看起來像'$ scope。$ on('destroy',function(/ *關閉你的監聽器在這裏* /){ });' –
問題是,沒有銷燬事件 – Babak
您的其他控制器實例如何運行? –