2016-02-18 4 views
6

Как получить номер в [(ngModel)] в Angular 2?Как получить номер в [(ngModel)] в 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"} 
]; 

Я пытался добавить type="number" в разных местах.

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

и

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

Но когда я выбираю новый пункт, levelNum еще становится строкой.

+1

Что произойдет, если вы определите интерфейс и используете его вместо объекта, где num - тип номера? –

+0

@DavidL У меня на самом деле есть «интерфейс уровня» {num: number, name: string} ', но все равно тот же –

+0

@HongboMiao здесь тот же [SO question] (http://stackoverflow.com/q/33181936/2435473) без полезного ответа –

ответ

7

с * ngFor в Angular2, кажется, не работает должным образом при использовании объектов. Они открыли выпуск в github, но он все еще не был разрешен.

Пока это не исправлено, я бы сделал что-то вроде изменения строкового значения на число при каждом изменении значения выбора.

@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

спасибо, хороший трюк! –

+0

Для массивов просто используйте: this.list = this.list.map (Number); – Rookian

1

Я думаю, что самое простое решение было бы привести его к ряду, когда вам нужно использовать ... Простой +this.levelNum будет делать. http://plnkr.co/edit/SxQfNlUB4RNdo2OndM9o

Смежные вопросы