sockets - 使用什么来代替socket.removeAllListeners();在客户端

标签 sockets angularjs socket.io

我遇到了与 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返回的一个包装器,它只有两个方法:onemit

$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/

相关文章:

java - 为什么我不能不等待就将 int 从 java 发送到 C?

javascript - 无法解析状态 AngularJS

google-chrome - Websocket 连接错误 资源不足

javascript - 将nodejs集成到现有应用程序中

android - 如何从后台服务向 Activity 发送数据?

c - C 函数 recvfrom 和 sendto 是否互斥?

windows - I/O完成端口* LAST *称为回调,或: where it's safe to cleanup things

c# - 在 C# 上使用代理中继 HTTPS 请求

configuration - 如何让 Yeoman 不使用应用程序 .js 文件的父目录名称?

java - 如何将 JSON 数组从 AngularJS Controller 传递到 Spring Controller ?