向下和向上事件

问题描述:

我正在尝试角2,我认为它太棒了! 但我无法弄清楚如何发射/订阅事件。向下和向上事件

例如: 我有两个小部件:componentA和componentB。 ComponentA包含一个水果列表。 ComponentB包含水果的细节。当用户从列表中选择一个水果(componentA)时,我希望ComponentB执行一个功能(例如console.log(event))。

要实现这种行为,我想使用事件。 ComponentA不是componentB的父类,它们是兄弟。但我希望事件向下传播,也向上传播。 任何知道活动名称的人都必须能够订阅此活动。

可能吗? 我想使用angular2类,而不是外部库。

我当前的代码:

export class ComponentA 
{ 
    @Output() emitter: EventEmitter<string> = new EventEmitter(); 

    private onFruitSelected():void 
    { 
     this.emitter.emit ("Hello!"); 
    } 
} 


export class ComponentA 
{ 
    constructor():void 
    { 
     // subscribe doJob() to the event 
    } 

    private doJob():void { console.log('event catched'); } 
} 

谢谢!

编辑

我以这种方式更新的代码:

事件处理程序服务:

export class EventEmitterService 
{ 
    @Output() eventOne: EventEmitter<string> = new EventEmitter(); 
    @Output() eventTwo: EventEmitter<number> = new EventEmitter(); 
} 

componentA(事件发送):

export class ComponentA 
{ 
    public constructor(private eventHandler:EventEmitterService) {} 

    private onFruitSelected():void 
    { 
     this.emitter.emit ("Hello!"); 
     this.eventHandler.eventOne.emit ("Hello event one"); 
     this.eventHandler.eventTwo.emit (12); 
    } 
} 

以componentB(事件接收器):

export class ComponentA 
{ 
    constructor():void 
    { 
     eventHandler.eventOne.subscribe ((evt:string) => { 
      console.log ('Event one ' + evt); 
     }); 

     eventHandler.eventTwo.subscribe ((evt:number) => { 
      console.log ('Event two ' + evt); 
     }); 
    } 
} 

这是一个很好的解决方案吗?

+0

谢谢你的回答!我刚刚更新了我的问题,您想通过解决方案考虑什么?再次感谢! – user3471528