AngularJS:确保在广播/发射事件之前加载所有控制器

时间:2015-01-30 13:18:59

标签: javascript angularjs websocket

我正在开发一个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加载,因此他们很想念'广播,因此数据。

有没有办法确保所有控制器都已加载并因此收听广播?我做了一些根本错误的事情吗?

0 个答案:

没有答案