Angular.JS中的Resource + Socket.io工厂

我正在使用Angular.JS编写一个Web应用程序,它使用Express和Socket.IO(一个Node模块)编写的后端系统。 我已经在Angular.JS中编写了一个列出元素的工厂:

angular.module('myApp.api', ['ngResource']) .factory('Element', function($resource, Socket) { return $resource( 'http://localhost:4000/elements/:id', { id : '@id' }, { update: { method: 'PATCH' } } ); }); 

这个工厂在ElementCtrl中使用,并相应地显示了这些元素,这是完美的:

 angular.module('myApp.element', []) .controller('ElementCtrl', ['$scope', 'Element', function($scope, Element) { var elements = Element.query(); }]); 

不过,我也在后端实现了Socket.io,如果一个元素被添加到元素列表中,它将发送消息。 我想改变元素工厂或find一些其他的方式来处理这个透明的控制器。 我的客户端Socket.io代码如下:

 angular.module('myApp.socket', []) .factory('ElementRealtime', function($resource, Socket) { var socket = io.connect('http://localhost:4000'); 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); } }); }) }, send: function(eventName, data, callback) { socket.send(eventName, data, function() { var args = arguments; $rootScope.$apply(function() { if (callback) { callback.apply(socket, args); } }); }); } }; }); 

在控制器中,我可以像这样更新代码:

 Socket.on('connect', function (data) { Socket.emit('subscribe', { channel: 'element' }); }); Socket.on('message', function (data) { elements = Element.query(); }); 

有无论如何build立一个工厂/服务,处理$资源和套接字部分,所以我只能写:

 var elements = Element.someFunction(); 

在控制器中,在套接字端收到更新时调用Element.query()? 通过这种方式,我可以编写一个API服务,处理所有来自后端的实时更新,并为最终版本的控制器提供服务。