2015-12-21 71 views
1

我正在嘗試角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); 
     }); 
    } 
} 

這是一個很好的解決方案嗎?

回答