Мое приложение выглядит следующим образом:Поймать событие родственного компонента
<my-app>
<my-toolbar></my-toolbar>
<my-cube-container></my-cube-container >
</my-app>
Я хотел бы общаться с my-toolbar
к my-cube-container
. Я посылаю событие на панели инструментов:
@Component({
selector: 'my-toolbar',
template: `...
<i class="fa fa-search-minus ic" (click)='onZoom(-1)' aria-hidden="true"></i>
`,
})
export class ToolbarComponent {
@Output() zoomEvent: EventEmitter<number> = new EventEmitter();
onZoom(value:number){
console.log('event sent');
this.zoomEvent.emit(value);
}
}
И сначала я хотел поймать событие в собрата, который my-cube-container
(см структуру приложения выше). Однако я читал, что это отношение испускающего события и уловки исключительно зарезервировано для общения с родителями. ** Это так? **
Итак, я попытался установить связь с родителем вместо этого (и создать в будущем еще один eventEmitter, чтобы я мог поймать событие в моем целевом компоненте my-cube-container
). Однако я до сих пор не поймал это событие.
@Component({
selector: 'my-app',
template: `
<my-toolbar></my-toolbar>
<my-cube-container (zoomEvent)="onZoom($event)"></my-cube-container>
`
})
export class AppComponent {
onZoom(val){
console.log("event catched");
}
}
Что я делаю неправильно? Мне нужно что-то изменить в ngModul?
Скобки вокруг (zoomEvent), как предполагается, означает, что это моя-панель инструментов, которая догоняет его собственное мероприятие. Кажется, что немного назад - или избыточное - лучшее слово, поскольку оно является компонентом, излучающим событие в первую очередь. Разве нет встроенного способа прямого выполнения этого из класса Component? – Ced
Это не 'my-toolbar', который ловит событие. На самом деле это компонент, который имеет этот HTML-код в шаблоне (общий родительский элемент). Вы можете использовать общую службу и наблюдаемые для связи между компонентами, которые не являются прямыми родителями-дочерними, но это кажется излишним для такого простого случая. –
о, да, мой плохой, спасибо – Ced