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);
});
}
}
這是一個很好的解決方案嗎?
謝謝你的回答!我剛剛更新了我的問題,您想通過解決方案考慮什麼?再次感謝! – user3471528