我正在尋找將socket.io與我的角應用程序集成在一起。我見過一些如何創建服務的例子,這使得它可以在控制器上訪問。我明白。但我正在尋找一種方式,所有的控制器都可以對來自socket.io的事件調用做出反應。在Angular應用程序中偵聽socket.io
所以:
socket.on('user joined', function (data) {});
我能做到這一點的一個控制器,但我怎麼做它呢?
我正在尋找將socket.io與我的角應用程序集成在一起。我見過一些如何創建服務的例子,這使得它可以在控制器上訪問。我明白。但我正在尋找一種方式,所有的控制器都可以對來自socket.io的事件調用做出反應。在Angular應用程序中偵聽socket.io
所以:
socket.on('user joined', function (data) {});
我能做到這一點的一個控制器,但我怎麼做它呢?
你會想要encapsulate your socket in a service and inject it into Angular controllers as needed。
讓我們創建一個Socket服務:
app.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);
}
});
})
}
};
});
然後,我們將注入控制器和與它進行交互(通過socket.io
API):
function AppCtrl($scope, socket) {
socket.on('init', function (data) {
$scope.name = data.name;
$scope.users = data.users;
});
}
可以很明顯的自定義控制器用套接字服務來做你所需要的。
是的,我意識到在所有控制器中都沒有意義......顯然!我現在的問題是如何初始化連接「var socket = io.connect();」每次我實例化它時它會啓動一個新的連接嗎? –
明白了!但現在我遇到了麻煩,「未捕獲的ReferenceError:io未定義」 –
您的客戶端頁面上引用了'socket.io' js嗎?您可能也必須[啓動服務器上的偵聽器](http://stackoverflow.com/a/13372692/4118286)。 – zacran
你應該在服務中做到這一點,並將其注入控制器。 –