我在两个标签页面中打开了我的页面。由于某种原因,客户' on'只有在两个标签都提交了帖子后才会触发。
// server
io.on('connection', function (socket) {
socket.on('newPost', function (post) {
io.emit('newPostReturn', post)
console.log(post)
})
})
// client (angular)
$rootScope.socket = io('http://172.28.28.201:3000');
$rootScope.socket.emit('newPost', post);
$rootScope.socket.on('newPost', function (post) {
$scope.$apply(function () {
$scope.posts.push(post);
});
});
更新:
已更改为使用https://github.com/btford/angular-socket-io。同样的问题。另外我注意到,在第三次发出后,每个客户重新运行' on'下一次。这就像第一次触发' on'零次,然后每次后续调用都会触发一次额外的时间。
.factory('socket', function (socketFactory) {
var ioSocket = io.connect('http://172.28.28.201:3000');
socket = socketFactory({
ioSocket: ioSocket
});
return socket;
});
更新2:我愚蠢!!
我有我的' on'处理程序INSIDE提交帖子事件。将它移到外面,当然,一切都按预期工作。现在一切都很完美。感谢
答案 0 :(得分:1)
我建议你创建一个服务来创建一个服务来处理socket.io连接;寻找angular socket io,它实际上是一个服务包装器。
你将有一个较少耦合的实现,它将更容易处理实例和连接。