Angular2 доступ к выбору изменения события в компоненте
Работа с формами Angular2s и попытка выяснить процесс обработки событий с помощью выборок. У меня есть объект Heros, который хранится в опциях. То, что я хочу сделать, это то, что когда я выбрал героя, инициируйте событие родительскому компоненту, который будет делать что-то с результатами. Тем не менее, я не могу найти конкретный пример возможности получить событие, когда выбор изменился (т.е. Новый герой в списке, который был выбран).
interface Hero {
id: number;
name: string;
}
@Component({
selector: 'my-app',
template:`
<h1>{{title}}</h1>
<form>
<select>
<option *ngFor="#hero of heros "
[value]="hero">
{{hero .name}}
</option>
</select>
</form>
`
})
export class AppComponent {
@Input() heros:Observable<Hero>
@Output("selectedHeroChange") selectedHeroChange:EventEmitter<any> = new EventEmitter
onHeroChange(hero:Hero){
this.selectedHeroChange._next(hero);
}
}
Спасибо заранее!
Ответы
Ответ 1
Выполнить код при выборе изменения и использовать свойство id
или index
как значение`:
<select (change)="onHeroChange($event)">
<option *ngFor="#hero of heros; #i=index"
[value]="hero.id">
<!-- [value]="i" -->
{{hero.name}}
</option>
</select>
получить выбранное значение из события
onHeroChange(event:Event):void {
Hero hero = heros.firstWhere(
(Hero hero) => hero.id == (event.target as SelectElement).value);
// Hero hero = heros[int.parse((event.target as SelectElement).value)];
selectedHero = hero;
selectedHeroChange.add(hero);
}
См. также https://github.com/angular/angular/issues/4843#issuecomment-170147058
См. также Связывание выберите элемент для объекта в Angular 2
Ответ 2
Кажется, в ng2 есть пробел, который не может обрабатывать объекты. На данный момент это рабочий раунд.
Как использовать select/option/NgFor для массива объектов в Angular2
Ответ 3
Вы получаете объект от выбора с помощью
[ngValue]="hero"
вместо
[value]="hero".