如何将外部EventSource作为AngularJS服务处理?

时间:2013-01-18 19:57:37

标签: javascript javascript-events angularjs

我希望我的控制器能够订阅外部事件源,我通常会定义它:

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?

1 个答案:

答案 0 :(得分:0)

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

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

source.addEventListener('beta', function(e) {
  doSomethingElse();
}, false);