Angularjs 对工厂运作方式可能存在的根本性误解?
我试图编写一个Angular工厂,它基本上打开一个websocket,监听连接并打印从服务器接收到的消息 我以这种方式打造了我的工厂:Angularjs 对工厂运作方式可能存在的根本性误解?,angularjs,websocket,Angularjs,Websocket,我试图编写一个Angular工厂,它基本上打开一个websocket,监听连接并打印从服务器接收到的消息 我以这种方式打造了我的工厂: angular.module('zmApp.controllers') .factory('EventServer', [ '$websocket',function ( $websocket) { function start() { console.log("*************FACTORY EVENT S
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回调
- 如果我将“工厂”重命名为“服务”,它会在应用程序运行时自动启动,但 当我移动到另一个控制器/视图时,它停止接收消息(与工厂相同)
谢谢工厂是单例的,这意味着每次将新实例注入控制器或其他工厂时都会创建一个新实例 听起来您没有将工厂注入到您想要使用它的地方。您想要在其中使用它的控制器应该如下所示:
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套接字连接将是独立的因此,迫切需要让工厂运转起来。