问题 - 将angualrjs与socket.io集成

时间:2013-11-19 07:55:18

标签: javascript angularjs socket.io

我正在使用socket.ioangularjs来显示项目中的实时数据。

socket.io在没有 angularjs 的情况下正常运行。

controller.js

   var realTime = angular.module('realTime',[]);
   realTime.controller('realTime', function($scope) { });
   realTime.factory('socket', function($rootScope) { });

   realTime.controller('realTime', function($scope,socket) {
    //socket is undefined
      socket.on('realTimeData', function (result) {
          $scope.realTimeCount = 2;
      });

    });

上面的代码在controller.js中,Socket.io定期向客户端发送realTimeData事件数据。问题出在客户端。

问题

socket is undefined inside the `realTime.controller` function.

注意:在html文件中添加了socket.io脚本

<script src="/socket.io/socket.io.js"></script> 

任何帮助或建议都会很棒。

1 个答案:

答案 0 :(得分:1)

定义socket工厂资源(realTime.factory('socket', function($rootScope) { });)时,请将其留空。你的套接字方法(on,emit等)应该在那里才能正常工作。

所以试试这个:

realTime.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);
          }
        });
      });
    }
  };
});

详细解释了here