使用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);
}
}
提前致谢!
答案 0 :(得分:11)
执行选择更改时的代码并使用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
答案 1 :(得分:6)
似乎ng2中存在选择无法处理对象的间隙。现在是一轮工作。
How to use select/option/NgFor on an array of objects in Angular2
答案 2 :(得分:2)
您可以使用
从选择中获取对象[ngValue]="hero"
而不是
[value]="hero".