我遇到了与 Improve this AngularJS factory to use with socket.io 类似的问题但接受的答案似乎使用了一个不再存在的函数,所以如果我需要删除监听器,在 angular.js Controller 的客户端,可以用什么替代 socket.removeAllListeners();
?我正在使用 socket.io v .9.16
最佳答案
socket.removeAllListeners()
仍然存在。无法调用的原因是,真正的socket是这个:var socket = io.connect()
。
下面代码中的“socket”是Angular Factory返回的一个包装器,它只有两个方法:on
和emit
。
$scope.$on('$destroy', function (event) {
socket.removeAllListeners();
// or something like
// socket.removeListener(this);
});
您可以做的就是向 socket
工厂添加新的 getSocket
方法,如下所示:
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);
});
关于sockets - 使用什么来代替socket.removeAllListeners();在客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21008087/