Существует хорошее обсуждение вопроса трекере Angular2 о: "Почему? EventEmitter не пузыриться". Это обсуждение here.
Так что я думаю, что вы должны выставить событие во всей иерархии компонентов ...
Я предлагаю следующее решение:
Dashboard.ts:
import {Component} from 'angular2/core';
import {MyTicker} from './my-ticker'
@Component({
selector: 'dashboard-app',
template: `<my-ticker [datas]="dashBoardDatas" (onSelection)="selectValueChanged($event)"></my-ticker>`,
directives: [MyTicker],
})
export class DashboardApp {
private dashBoardDatas: Array<string>;
constructor(){
this.dashBoardDatas = ["toto", "tata"];
}
selectValueChanged(value: string){
console.log('Selected value changed to :' + value);
}
}
И MyTicker .ts:
import {Component, Input, Output, EventEmitter, AfterViewInit} from 'angular2/core';
import {MySelect} from './my-select'
@Component({
selector: 'my-ticker',
template: `
<p>
<my-select [datas]="datas" (onSelection)="onSelection.emit($event)"></my-select>
</p>
`,
directives: [MySelect]
})
export class MyTicker {
@Input() datas: Array<string>;
@Output() onSelection: EventEmitter <string> = new EventEmitter();
constructor() {}
ngAfterViewInit(){
console.log("Datas in ticker : " + this.datas);
}
}
И MySelect.ts:
import {Component, Input, Output, EventEmitter} from 'angular2/core';
@Component({
selector: 'my-select',
template: `
<p>
<select name="filter" (change)="onSelection.emit($event.target.value)">
<option *ngFor="#item of datas" value="{{item}}">{{item}}</option>
</select>
</p>
`
})
export class MySelect {
@Input() datas: Array<string>;
@Output() onSelection: EventEmitter <string> = new EventEmitter();
constructor() {}
}
Для иллюстрации этого я сделал следующее Plunkr.
Как вы можете видеть, на панели инструментов у меня есть метод, который я хочу вызвать, когда изменяется содержимое выбора тикера (selectValueChanged) (которое срабатывает при изменении выбора моего выбора) ... Итак, у нас есть для переопределения эмиттера событий в «MyTicker».
Тикер и выбор содержит те же элементы, что и в вашем вопросе. Излучатель событий и данные фильтра. Когда значение select изменяется, я выделяю событие (спасибо (change) = "onSelection.emit ($ event.target.value)"). Это событие «уловлено» тикером и переизлучено, а затем уловлено панелью управления (благодаря «(onSelection) =« selectValueChanged ($ event) ». Поэтому метод« selectValueChanged »из Dashboard вызывается, когда событие" OnSelection "из MySelect.
Какой обратный вызов является« обратным вызовом »в« так что я передаю функцию обратного вызова »?' FilterData'? Что такое 'ctrl' в' ctrl.filterData'? –
ctrl является псевдонимом . контроллер, который имеет все эти данные Я хочу назвать 'onTickerFilterChange ($ события);.' на изменении выпадающего списка Так тикер компонент должен передать эту функцию обратного вызова DropDown Пожалуйста, см dropdown.html –
Я хотел бы. Поймите немного больше своего вопроса. nt для уведомления в Личном кабинете о том, что значение Ticker Selected изменилось? –