我使用socket.io
和angularjs
来显示项目中的实时数据。
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);
}
});
});
}
};
});
这里有详细的解释。