Ich brauche eine globale Anwendung weise Web-Socket, die von allen meiner Controller in App verwendet werden kann.WebSocket-Callback nicht mit angularjs gefeuert
Der folgende Code beschreibt die meine Anwendungsfall, wo ich eine Fabrik bin die Schaffung eines Singletons websocket Objekt zu teilen. Mit der bereitgestellten Schnittstelle können die Controller die Daten über den Socket senden und den Listener für eingehende Nachrichten anhängen.
Das Problem mit dem folgenden Code ist, dass ich in der Lage bin, die Daten auf dem Sockel zu senden, wie erwartet, aber nicht in der Lage, Daten zu empfangen, wenn es über die Steckdose kommt.
Ich habe mehrere eckige Digest bezogene Lösungen gelesen, aber sie funktionieren nicht für mich.
angular
.module('myApp', [])
.factory('socket', function() {
var socketStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
var socket = new WebSocket("ws://localhost:7070/ws");
socket.onopen = function(event) {
socket.send("hello");
};
socket.addEventListener('message', function(event) {
// I am able to see this so, it is confirmed that server is sending the data
console.log(event);
});
return {
emit: function (data) {
socket.send(JSON.stringify(data));
},
on: function(callback) {
socket.addEventListener('message', callback);
},
getStatus: function() {
var status = socket.readyState;
return socketStates[status]
}
};
})
.controller('MyController', function(socket){
var myctl = this;
//This works
socket.emit({type : "register", name: producer});
//This doesn't work
socket.on(function(event) {
console.log(event);
});
});
$rootScope.$apply(socket.addEventListener('message', callback));
statt
socket.addEventListener('message', callback);
führt den folgenden Fehler
vendor.js:5 Error: [$rootScope:inprog] $digest already in progress(…)(anonymous function)
Sollte sein zu lösen 'onmessage' zu lesen? – Jackthomson
konnte Ihre Frage nicht verstehen, ja die eventlistener sollte auf onmessage –
abgefeuert werden versuchen 'emit' und' socket.on' Swapping und sicherzustellen, dass der Server keine Daten sendet – Oskar