我正在开发一个AngularJS应用程序并遇到(可能)一个非常基本的问题。涉及多个控制器,它们通过$ broadcast和$ on相互通信。应用程序正在使用websockets,并且应该在websocket打开后开始执行它。所以现在问题仍然存在,谁应该打开websocket,因为当时必须加载所有控制器来监听广播。
所以有一个服务负责处理websocket,它执行以下操作:
this.websocket = new WebSocket(webSocketUrl());
this.websocket.onopen = function() {
$timeout(function() {
$rootScope.$broadcast("websocket_opened");
});
};
现在'主要'应用程序的控制器对此广播作出反应并发出一些请求。
$scope.$on("websocket_opened", function() {
// some requests
});
服务器的答案出现后不久,前面提到的websocket服务将广播数据包的到来。
this.websocket.onmessage = function(data) {
$rootScope.$broadcast("packet received", data);
};
问题是,这些请求的答案经常在“子控制器”之前到达客户端。由AngularJS加载,因此他们很想念'广播,因此数据。
有没有办法确保所有控制器都已加载并因此收听广播?我做了一些根本错误的事情吗?