如何在Angular中创建发布者/订阅者模型?

如何在Angular中创建发布者/订阅者模型?,angular,publish-subscribe,Angular,Publish Subscribe,我一直在玩Angular,并一直在试图找到一种方法,在整个组件树中使用发布/订阅机制 EventEmitter似乎只发送一个可以订阅一级的事件,而不是更多。类似地,它只向树上发射事件,但现在向下发射 相关代码如下: class App { onAncestor($event) { console.log('in ancestor, decendent clicked',$event); } } ... class Entities { .... onPar

我一直在玩Angular,并一直在试图找到一种方法,在整个组件树中使用发布/订阅机制

EventEmitter似乎只发送一个可以订阅一级的事件,而不是更多。类似地,它只向树上发射事件,但现在向下发射

相关代码如下:

class App {
  onAncestor($event) {
     console.log('in ancestor, decendent  clicked',$event);
  } 
}

 ...
class Entities {
   ....
   onParent($event) {
     console.log('in entities parent, child  clicked',$event);
   } 

   onGrandParent($event) {
      console.log('in grand parent, grandschild  clicked',$event);
   } 
}


只调用onParent,而不调用onGrandparent或onAncestor。类似地,它也不会向下发布。

Angular 2附带了一个名为RxJs的observables库,可用于创建一个服务,我们可以订阅和提交事件

然后,我们使用依赖注入机制将该服务注入应用程序中需要它的任何位置

因此,不再需要广播/发射事件机制,因为它被更强大的可观察机制所取代,该机制内置于框架中的任何地方:
EventEmitter
是可观察的,表单值是可观察的,
http
可以返回可观察的等


有关如何使用RxJs为发布/订阅构建服务的示例,请参见本文

在AngularJS 1.x的世界中,您可以使用我们在我的组织中编写的一个轻量级插件,为使用发布/订阅模型的应用程序启用快速和惰性状态管理

如果你已经离开安格拉斯大学,显然要接受安格拉斯大学的答案。


this.pubsubService.subscribe({看看这个lib-ng事件总线()

它是基于RxJS的消息/事件总线服务,用于NgRadio启发的Angular应用程序


您可以发布消息,并在代码的其他部分订阅它。

谢谢。如果是这样,那么为什么Angular2有一个EventEmitter?看看类EventEmitter上的注释这里是一个如何将Observables/EventEmitter用于发布订阅的示例