我正在使用socket.io
和angularjs
来显示项目中的实时数据。
socket.io
在没有 angularjs 的情况下正常运行。
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>
任何帮助或建议都会很棒。
答案 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。