Я пытаюсь угловой 2, и я думаю, что это здорово! Но я не могу понять, как испускать/подписываться на события.Вниз и вверх события
Например: У меня есть два небольших компонента: componentA и componentB. КомпонентА содержит список фруктов. Компонент В содержит детали фруктов. Когда пользователь выбирает фрукты из списка (componentA), я хочу, чтобы ComponentB выполнял функцию (например, console.log (event)).
Для этого я хотел бы использовать события. ComponentA не является родителем компонента B, они братья. Но я хочу, чтобы событие распространялось вниз, а также вверх. Любой, кто знает название мероприятия, должен иметь возможность подписаться на это событие.
Возможно ли это? Я хотел бы использовать классы 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'); }
}
Спасибо!
EDIT
Я обновил код таким образом:
событий службы обработчика:
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