我正在尝试编写一个Angular工厂,它基本上打开一个websocket,监听连接并打印从服务器接收的消息
我用这种方式制作了我的工厂:
angular.module('zmApp.controllers')
.factory('EventServer',
[ '$websocket',function
( $websocket) {
function start()
{
console.log("*************FACTORY EVENT SERVER*************");
var dataStream;
console.log ("FACTORY webSocketStart: attempting to start a WSS connection");
dataStream =$websocket("wss://<server>:9000/");
dataStream.onMessage = function(message) {
console.log("SERVICE GOT WEBSOCKET MESSAGE:" + message.data);
};
return {
start:start
};
}])
以下是我的疑惑:
我的目标是编写一个接收Web套接字消息的工厂。我可能会对如何做到这一点感到困惑,并使其与我的应用程序所处的状态/视图无关。
这是奇怪的部分:如果我启动了带有重新连接选项的Web套接字套接字并且我关闭了服务器,我可以看到Web套接字试图重新连接 - 所以我知道连接对象 - dataStream没有得到销毁。
我知道$ websocket正在运行,因为如果我在一个控制器内为我所在的视图创建一个Web套接字,它可以正常工作并且接收到onMessage。
我似乎无法得到的是如何将其推入独立视图的工厂。
我很感激你的建议。
谢谢
答案 0 :(得分:0)
工厂是单件,意味着每次将其注入控制器或其他工厂时都会创建一个新实例。
听起来你并没有在你想要使用它的地方注入工厂。您要使用它的控制器应如下所示:
angular
.module('zmApp.controllers')
.controller('YourController', ['EventServer', function(EventServer) {
EventServer.start // to access the method in your factory
}]);
您需要为要使用EventServer
的每个控制器或工厂执行此操作。