Bazı verileri rastgele aralıklarla dışarı itmek için Düğüm sunucumu kurdum ve veriler istemciye/tarayıcıya ulaşıyor; Ancak, uygulamamın kontrol biriminde nasıl erişileceğini anlayamıyorum. Ben Terminaline alert
oturum açtığınızdaNode.js + AngularJS + Socket.io: denetleyicide mevcut olmayan veriler
#node.js file: /server.js (truncated for brevity)
var http = require('http').createServer(handler),//refers to handler()
fs = require('fs'),
io = require('socket.io').listen(http);
http.listen(8000);
…
io.sockets.on('connection', function (socket) {
/* DUMMY CODE: this generates fake alerts at random intervals */
(function loop() {
var rand = Math…;
…
setTimeout(function(){
…
var alert = { … };
socket.emit('alert', {
"alert": alert
});//socket.emit()
loop();
}, rand);
}());
});//io.sockets.on()
, bu şuna benzer: aşağıdan
alert: {
id: 258,
lat: -95.20933,
long: 37.027676,
neighbourhood: "Downtown",
time: //stringified js timestamp
}
Ve arguments
(alert
olarak temelde aynı) İstediğim verileri içerir.
# /app/js/services.js
angular.module('BAR.services' , [])
.factory('socketio', function($rootScope){
var socket = io.connect();
return {
on: function(event, callback) {
socket.on(event, function(){
//console.log(arguments);
$rootScope.$apply(function(){
callback.apply(socket, arguments);
});//$rootScope.$apply()
});//socket.on()
},//on
emit: function(event, data, callback) {
socket.emit(event, data, function(){
//console.log(arguments);
$rootScope.$apply(function(){
if (callback) callback.apply(socket, arguments);
});//$rootScope.$apply()
});//socket.emit()
},//emit
disconnect: function() {
socket.disconnect();
}
}//return
});// AlertServices
Ancak, benim denetleyicisi arguments
verilere erişmek için nasıl bilemiyorum: Ben denetleyicisi burada tarayıcının konsoluna data
oturum açtığınızda
# /app/js/controllers.js
function Alerts($scope , socketio) {
socketio.on('alert', function(data) {
console.log(data); /* I expect this to be the data I want */
$scope.alert = data.alert;
});
$scope.disconnect = function(){
socketio.disconnect();
}
}
Alerts.$inject = ['$scope','socketio'];
, ben muazzam olsun $scope
ana öğesi gibi görünüyor; ve data.alert
tanımsızdır. arguments
(callback.apply(…)
hizmetlerinde 2 olduğundan), bu socketio.on('alert', function(data , args)
gibi ikinci bir parametre belirtmeyi denedim, ancak konsolda oturum açtığımda, args
undefined döndü.
Btw, bunu AngularJS stajyer tarafından a tutorial numaralı telefondan aldım. Farklı parçalar aynı isimlere sahipti, bu yüzden her farklı zeminin ne yaptığını anladığım için biraz sıkıntı çektim (aynı zamanda Yeşim'de de yararlı olmadı).
Gerçekten yapmak istediğim, görünümümde alert
verileriyle bir bağlantı güncelleştirmesidir. senin on
ve emit
işlevlerinde
aman tanrım şimdi mantıklıdır:
çözüm
$apply
çağrısına dışındaki argümanları yakalamak ve geri arama içine bu geçmek olacaktır. Neden sadece bir kez kullanmak için argümanlar tahsis etmekten rahatsız olduğunu merak ediyordum. Bunu sabahları deneyeceğim. Teşekkürler! – jacobBu yazının yazarı burada: Bu doğru cevap. – btford
Hazzaaah! İşe yaradı. Teşekkürler! – jacob