我在angularjs(BTFord库)和NodeJS Socket.IO之间开发我的聊天应用程序时遇到了问题......
实际上,我需要用户A向用户B发送消息。 - 如果我在节点中记录消息,它可以正常工作,并且只发送一次。 - 在角度js中,事件开启(“消息”)被称为3或4次,我有消息发送3或4次
对我来说这是个问题......我只需要收到一次消息。 这有什么问题吗?
感谢您提前
答案 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
}
}
只会注册一次听众! 干杯!