Angulars JS Btford库,NodeJS Socket.io

时间:2014-09-09 14:31:01

标签: javascript node.js angularjs socket.io

我在angularjs(BTFord库)和NodeJS Socket.IO之间开发我的聊天应用程序时遇到了问题......

实际上,我需要用户A向用户B发送消息。 - 如果我在节点中记录消息,它可以正常工作,并且只发送一次。 - 在角度js中,事件开启(“消息”)被称为3或4次,我有消息发送3或4次

对我来说这是个问题......我只需要收到一次消息。 这有什么问题吗?

感谢您提前

2 个答案:

答案 0 :(得分:0)

切换/重新加载控制器时不会破坏事件处理程序。因此,您可能已为您的活动订阅了倍数。

请参阅文档:https://github.com/btford/angular-socket-io#socketremovelistener

你可以试试这个:

angular.module('Foo').controller('BarCtrl', function ($scope, socket) {

  socket.on('message', function (msg) {
     // ... do something
  });

  $scope.$on('$destroy', function() {
    socket.removeListener('message');
  });

});

答案 1 :(得分:0)

我有类似的情况,最终控制器执行了不止一次,所以要注意这一点,检查它是否运行多次使用带有console.log的消息,beign说可能你正在注册几个客户端的监听器,以避免在您的客户端设置条件:(假设您在$ rootscope上注册事件)

if( $rootScope.$$listeners['socket:someListener']===null || $rootScope.$$listeners['socket:someListener']===undefined){
    $rootScope.$on('socket:someListener', function(ev, data){
        //Client code
    }
}

只会注册一次听众! 干杯!