我需要一個全球性的應用程序明智的網絡套接字,它可以被我的所有控制器在應用程序中使用。WebSocket回調未觸發angularjs
以下代碼描述了我創建工廠以共享單例websocket對象的用例。提供的接口允許控制器通過套接字發送數據並附加偵聽器以接收消息。
以下代碼的問題是,我能夠按照預期發送套接字上的數據,但無法在套接字上發送數據。
我已經閱讀了幾個角度摘要相關的解決方案,但它們不適合我。
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));
,而不是
socket.addEventListener('message', callback);
引發以下錯誤
vendor.js:5 Error: [$rootScope:inprog] $digest already in progress(…)(anonymous function)
如果你的事件監聽是閱讀 '的onMessage'? – Jackthomson
無法理解你的問題,是的eventListener應該被解僱onmessage –
嘗試交換'emit'和'socket.on'並確保你的服務器正在發送任何數據 – Oskar