1

我希望我的控制器能够订阅外部事件源,我通常会用以下方式定义:

var source = new EventSource('http://someURL.com/foo');
source.addEventListener('bar', handler, false);

现在假设我正在使用的 API 只有一个正确的事件,但该事件会根据实际事件为您提供不同的字符串。所以我的处理程序看起来像:

var handler = function(data) {
   switch(data.cmd) {
       case 'alpha' : doSomething(); break;
       case 'beta' : doSomethingElse(); break;
       case 'cappa' : doAnotherThing(); break;
   }
}

这很不幸,我知道,但这就是它的实施方式。我想要的是能够公开一个有意义的服务 API,所以在我的控制器中,我将能够单独订阅每种类型的事件,订阅一次,或重复订阅,以及取消订阅。

这有意义吗?使用 $q API 是否有更好的方法来做到这一点?如果不是,我将如何将异步事件映射到 AngularJS 服务 API?

4

1 回答 1

0

您可以为每种消息类型注册一个侦听器。

source.addEventListener('alpha', function(e) {
  doSomething();
}, false);

source.addEventListener('beta', function(e) {
  doSomethingElse();
}, false);
于 2014-02-13T12:07:46.883 回答