Angularjs socket.io 服务

Posted

技术标签:

【中文标题】Angularjs socket.io 服务【英文标题】:Angularjs socket.io service 【发布时间】:2014-02-17 19:24:51 【问题描述】:

您好,我正在构建一个 angularjs 服务,该服务将通过 socket.io 使用 websockets 与后端 (node.js) 进行通信。我在网上找到了一段 sn-p 代码,但我不太明白它是如何工作的。特别是在“var args = arguments”下的行。帮忙?

angularjs_service.js

app.factory('socket', function ($rootScope) 
  var socket = io.connect();
  return 
    on: function (eventName, callback) 
      socket.on(eventName, function ()   
        var args = arguments;
        $rootScope.$apply(function () 
          callback.apply(socket, args);
        );
      );
    ,
    emit: function (eventName, data, callback) 
      socket.emit(eventName, data, function () 
        var args = arguments;
        $rootScope.$apply(function () 
          if (callback) 
            callback.apply(socket, args);
          
        );
      )
    
  ;
);

【问题讨论】:

【参考方案1】:

这就是 javascript 对未命名变量的厌恶的地方。变量arguments 指的是传递给函数的参数数组。您看到的是 Angular 代码抓取函数参数的数组并将它们传递给应用。

function(myVar1, myVar2)
    console.log(arguments.length);

将输出2

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments

【讨论】:

好的,谢谢。 $rootScope.$apply(function () callback.apply(socket, args); ); 怎么样?这些线路在做什么? 这个框架在 Angular 网站上有很好的记录,因为它是一个特定于 Angular 的问题。 docs.angularjs.org/api/ng.$rootScope.Scope 如果这回答了您的问题,如果您接受它,我将不胜感激! :D

以上是关于Angularjs socket.io 服务的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 不使用 socket.io 刷新视图

AngularJS:通过 https 使用 socket.io 的聊天应用程序

io() 函数前端——socket.io

使用angularJs显示来自socket io的数据

Socket IO AngularJS(1.x) 工厂注入多次发射

Node.js + AngularJS + Socket.io:推送的数据在控制器中不可用