【发布时间】:2014-10-16 18:44:33
【问题描述】:
我正在使用 Ionic 和 Socket.io,但我在“触发”emits 的确认回调时遇到问题..
在普通的javascript中,客户端是:
function ack(response){
console.log(response);
}
socket.emit('message',{data:"data"}, ack);
当服务器接收客户端触发该函数的消息时,服务器端是..
socket.on('message',function(data,fn){
fn({data:"response"});
});
所以,当服务器执行 fn({data:"response"}) 时,客户端会触发 ack 函数。
我用离子框架构建了这个工厂:
services.factory('$socket', ['$rootScope', function($rootScope) {
var socket = io.connect('http://127.0.0.1:9564');
function on(eventName, callback){
console.log(eventName);
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
}
function emit(eventName, data, callback){
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
}
return {
on: on,
emit: emit
};
}]);
在我的 UserCtrl 中,我尝试以这种方式使用:
function OnLogin(data){
console.log(data);
$scope.closeLogin();
}
$scope.doLogin = function() {
$socket.emit('user:login', $scope.loginData, OnLogin);
};
问题是 OnLogin 函数从未被调用,我尝试将该函数放入 $scope.OnLogin 中,但结果相同。
有什么解决办法吗?
谢谢
【问题讨论】:
标签: javascript node.js angularjs sockets