Angular2访问组件内的选择事件更改

时间:2016-01-08 22:01:39

标签: select typescript angular

使用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);
   }    
}

提前致谢!

3 个答案:

答案 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

另见Binding select element to object in Angular 2

答案 1 :(得分:6)

似乎ng2中存在选择无法处理对象的间隙。现在是一轮工作。

How to use select/option/NgFor on an array of objects in Angular2

答案 2 :(得分:2)

您可以使用

从选择中获取对象
[ngValue]="hero" 

而不是

[value]="hero".