【问题标题】:Ionic, Socket.io and AngularJS, Acknowleage doesnt workIonic、Socket.io 和 AngularJS,Acknowledge 不起作用
【发布时间】: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


    【解决方案1】:

    您是否确保添加的脚本的 url 本地主机相同? (即包含其他 js 脚本,在内部 js 文件上方?)

    【讨论】:

    • 是的,问题是 AndroidManifiest 中的 Internet 许可。 :P。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2017-09-16
    • 2019-01-03
    相关资源
    最近更新 更多