2016-02-18 22 views
6

Come ottenere il numero in [(ngModel)] in Angular 2?Come ottenere il numero in [(ngModel)] in Angular 2?

<select [(ngModel)]="levelNum"> 
    <option *ngFor="#level of levels" [value]="level.num">{{level.name}}</option> 
</select> 

levelNum:number; 
levels:Array<Object> = [ 
    {num: 0, name: "AA"}, 
    {num: 1, name: "BB"} 
]; 

Ho provato ad aggiungere type="number" in diversi posti.

<select type="number" [(ngModel)]="levelNum"> 
    <option *ngFor="#level of levels" [value]="level.num">{{level.name}}</option> 
</select> 

e

<select [(ngModel)]="levelNum"> 
    <option type="number" *ngFor="#level of levels" [value]="level.num">{{level.name}}</option> 
</select> 

Ma quando seleziono un nuovo elemento, levelNum diventa ancora una stringa.

+1

Cosa succede se si definisce un'interfaccia e la si utilizza al posto dell'oggetto in cui num è un tipo di numero? –

+0

@DavidL In realtà ho un 'livello di interfaccia {num: numero, nome: stringa}', ma sempre lo stesso –

+0

@HongboMiao ecco la stessa [domanda SO] (http://stackoverflow.com/q/33181936/2435473) con nessuna risposta utile –

risposta

7

Selezionare con * ngPer in Angular2 sembra non funzionare correttamente quando si utilizzano gli oggetti. Hanno aperto il problema in github ma non è stato ancora risolto.

Fino a quando non viene risolto, farei qualcosa di simile a cambiare il valore della stringa in un numero ogni volta che viene modificato il valore di selezione.

@Component({ 
    selector: 'my-app', 
    template:` 
    <h1>Selecting Number</h1> 
    <select type="number" [(ngModel)]="levelNum" (ngModelChange)="toNumber()"> 
     <option *ngFor="#level of levels" [value]="level.num">{{level.name}}</option> 
    </select> 
    {{levelNum}} 
    `, 
}) 
export class AppComponent { 
    levelNum:number; 
    levels:Array<Object> = [ 
     {num: 0, name: "AA"}, 
     {num: 1, name: "BB"} 
    ]; 

    toNumber(){ 
    this.levelNum = +this.levelNum; 
    console.log(this.levelNum); 
    } 
} 
+0

grazie, un bel trucco! –

+0

Per gli array basta usare: this.list = this.list.map (Number); – Rookian

Problemi correlati