使用什么而不是socket.removeAllListeners();在客户端

时间:2014-01-08 22:38:47

标签: sockets angularjs socket.io

我遇到了与Improve this AngularJS factory to use with socket.io类似的问题,但是接受的答案似乎使用了一个不再存在的函数,因此客户端的socket.removeAllListeners();替换为角度。 js控制器,如果我需要删除一个监听器?我正在使用socket.io v .9.16

2 个答案:

答案 0 :(得分:3)

socket.removeAllListeners()仍在那里。无法调用它的原因是真正的套接字就是这个:var socket = io.connect()

以下代码中的“套接字”是角度工厂返回的包装器,它只有两种方法:onemit

$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();