Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 对工厂运作方式可能存在的根本性误解?_Angularjs_Websocket - Fatal编程技术网

Angularjs 对工厂运作方式可能存在的根本性误解?

Angularjs 对工厂运作方式可能存在的根本性误解?,angularjs,websocket,Angularjs,Websocket,我试图编写一个Angular工厂,它基本上打开一个websocket,监听连接并打印从服务器接收到的消息 我以这种方式打造了我的工厂: angular.module('zmApp.controllers') .factory('EventServer', [ '$websocket',function ( $websocket) { function start() { console.log("*************FACTORY EVENT S

我试图编写一个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
     };
}])
angular.module('zmApp.controllers'))
.factory('EventServer',
['$websocket',函数
($websocket){
函数start()
{
console.log(“***************工厂事件服务器****************”);
var数据流;
console.log(“FACTORY webSocketStart:尝试启动WSS连接”);
数据流=$websocket(“wss://:9000/”;
dataStream.onMessage=函数(消息){
log(“服务获得WEBSOCKET消息:“+MESSAGE.data”);
};
返回{
开始:开始
};
}])
以下是我的疑问:

  • 我如何确保该工厂“启动”并收到 无论是哪个应用程序,像它这样的消息都应该 我所在的控制器/视图?我假设将该工厂包括在 index.html,它将自动被调用。不是这样。即使我在app.run中调用EventServer.start(),我也可以看到套接字正在初始化和连接,但我从未收到onMessage回调
  • 如果我将“工厂”重命名为“服务”,它会在应用程序运行时自动启动,但 当我移动到另一个控制器/视图时,它停止接收消息(与工厂相同)
我的目标是编写一个接收web套接字消息的工厂。我可能对如何做到这一点感到困惑,并使其独立于我的应用程序所处的状态/视图

这里有一个奇怪的部分:如果我启动web套接字并打开一个reconnect选项,然后关闭服务器,我可以看到web套接字正在尝试重新连接-因此我知道连接对象-数据流没有被破坏

我知道$websocket正在工作,因为如果我在控制器中为我所在的视图创建一个web套接字,它就可以完美地工作,并接收onMessage

我似乎无法理解的是如何将其推进到独立于视图的工厂中

谢谢你的建议


谢谢

工厂是单例的,这意味着每次将新实例注入控制器或其他工厂时都会创建一个新实例

听起来您没有将工厂注入到您想要使用它的地方。您想要在其中使用它的控制器应该如下所示:

angular
.module('zmApp.controllers')
.controller('YourController', ['EventServer', function(EventServer) {
   EventServer.start // to access the method in your factory
}]);

您需要为要在中使用
EventServer
的每个控制器或工厂执行此操作。

我正在注入它。下面是一个示例控制器-->工厂onMessage从未被调用。有趣的是,此控制器的onMessage即使在您导航出它时也会被调用!您可以使用
$websocket
服务目录特别是如果您只调用该服务的方法。这是一个服务,因此可以在您喜欢的地方注入。创建
EventServer
工厂是否添加了与
$websocket
已经在做的事情不同的东西?谢谢。所以现在这是一个存根。将来它将扩展得更多,并且此web套接字连接将是独立的因此,迫切需要让工厂运转起来。