2016-01-08 12 views
14

Lavorando con i moduli di Angular2s e cercando di capire il processo di gestione degli eventi con selects. Ho un oggetto Heros che è memorizzato nelle opzioni. Quello che voglio fare è che quando viene selezionato I Hero, si attiva un evento per il componente genitore che farà qualcosa con i risultati. Tuttavia, non riesco a trovare un esempio concreto di poter ricevere un evento quando la selezione è cambiata (cioè un nuovo eroe nell'elenco è stato selezionato).Angular2 accede a una modifica evento selezionata all'interno del componente

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

Grazie in anticipo!

+0

Mabe http://stackoverflow.com/questions/31177984/selects-events- in-angular2 –

+0

'this.selectedHeroChange.emit (hero);' –

+0

@EricMartinez Il problema è che non fa mai funzionare la funzione onHeroChange, perché non sono sicuro di come/quando chiamarlo – cjr

risposta

10

eseguire codice su selezionare il cambiamento e utilizzare una proprietà o idindex come value`:

<select (change)="onHeroChange($event)"> 
    <option *ngFor="#hero of heros; #i=index" 
    [value]="hero.id"> 
     <!-- [value]="i" --> 
     {{hero.name}} 
    </option> 
</select> 

ottenere il valore selezionato dall'evento

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

Vedi anche https://github.com/angular/angular/issues/4843#issuecomment-170147058

Vedi anche Binding select element to object in Angular 2

+0

Stavo tentando di farlo, ma quello che sta accadendo è che il [valore] = "eroe" sembra essere convertito tramite toString invece di memorizzare l'oggetto reale. Per far funzionare questa soluzione, dovrei avere [value] = "hero.id" e quindi avrei bisogno di scorrere il mio elenco per l'evento onchange e poi tornare .... che sembra un gap (questa funzionalità funzionava all'interno di KO) – cjr

+1

Per TS la tua funzione sarebbe simile a questa: 'onheroChange (event: Event): void {...}' –

+1

Grazie per il suggerimento! Solo un po 'più di un anno, ma sembra che sia passato anni: D –

2

si ottiene l'oggetto da un prescelto utilizzando

[ngValue]="hero" 

invece di

[value]="hero". 
Problemi correlati