问题-将angularjs与socket.io集成



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

socket.io在没有angularjs的情况下工作良好。

控制器.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> 

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

定义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);
          }
        });
      });
    }
  };
});

这里有详细的解释。

最新更新