我遇到了与Improve this AngularJS factory to use with socket.io类似的问题,但是接受的答案似乎使用了一个不再存在的函数,因此客户端的socket.removeAllListeners();
替换为角度。 js控制器,如果我需要删除一个监听器?我正在使用socket.io v .9.16
答案 0 :(得分:3)
socket.removeAllListeners()
仍在那里。无法调用它的原因是真正的套接字就是这个:var socket = io.connect()
。
以下代码中的“套接字”是角度工厂返回的包装器,它只有两种方法:on
和emit
。
$scope.$on('$destroy', function (event) {
socket.removeAllListeners();
// or something like
// socket.removeListener(this);
});
您可以做的是向getSocket
工厂添加新的socket
方法,如下所示:
app.factory('socket', function ($rootScope) {
var socket = io.connect();
return {
on: function (eventName, callback) {
// ...
},
emit: function (eventName, data, callback) {
// ...
},
getSocket: function() {
return socket;
}
};
});
然后你可以这样做:
$scope.$on('$destroy', function (event) {
socket.getSocket().removeAllListeners();
// or something like
// socket.getSocket().removeListener(this);
});
答案 1 :(得分:2)
如果您想将代码保留在服务本身中,您实际上只需将其添加到您要返回的对象中:
removeAllListeners: function() {
socket.removeAllListeners();
}
然后在您的控制器中,您只需拨打socket.removeAllListeners();