2016-09-13 11 views
8

をintに選択値をキャスト:角度2は、私のような異なった選択とフォームを持っている

<select [(ngModel)]="selected.isConnected" (ngModelChange)="formChanged()" name="etat" id="etat" class="form-control"> 
    <option value="0">Not connected</option> 
    <option value="1">Connected</option> 
</select> 

私のバックエンドは「をisConnected」属性にint型を受け取ることを期待します。残念ながら、すぐに私は属性を選択の値を変更すると、文字列にキャストされます。標準<input>については

{ 
    isConnected : "0", // 0 expected 
} 

私はtype="number"を使用しますが、私は無知だ<select>のために可能性があります。

角度2でデータをintに強制的にキャストする方法はありますか?

+0

あなたは 'formChanged()'メソッドを表示してくださいでしょうか? – micronyks

+0

ng-optionsを使用してください。ネストされたオプションを使用すると、モデルは常に文字列として設定されます。それは文書化されています。 –

+0

ng-optionはAngular2に存在しません。おそらく[値]の代わりに[ngValue]を使用することを意味します。 – abreneliere

答えて

26

使用[ngValue]の代わりに "値" の:

<select [(ngModel)]="selected.isConnected" id="etat"> 
    <option [ngValue]="0">Not connected</option> 
    <option [ngValue]="1">Connected</option> 
</select> 
+6

これは正解でなければなりません。 – sgotre

+1

作品は、角度から予想されるほど簡単です。 – Algis

+1

魅力的な作品です。矮星の魔術師によって製作されました。私の言っていることが分かるよね... –

1

selectから常に文字列が返されるため、悲しいことに悲しいことに、formChanged()メソッドでそれを自分で解析する必要があります。

あなたはこのようなもので、それを試みることができる:

formChanged(): void { 
    selected.isConnected = parseInt(selected.isConnected); 
    // ... 
} 
2

あなたは(あなたがまだ提供されていない)formChanged()メソッドの中でそれをキャストしたい場合。 下図のようにあなたが

formChanged(): void { 
    selected.isConnected = +selected.isConnected; 
    ... 
} 
+0

私はangleを自動的に解析することができると思っていました。しかし、formChanged()を使うと実際にそのトリックを行うことができます – grunk

+0

チェックしましたか?それは動作しないのですか? – micronyks

+0

私は何をしました:this.selected.myKey = Number(this.selected.myKey); – grunk

0

は、あなたが選択し、その選択の要素に値を代入する数値変数を送信することができ、+記号を使用する必要があります。次に、変更時に値を取得する場合は、イベントを追加(変更)して、以下のように値を選択して取得できます。

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'my-app', 
    template: `<select value="{{isConnected}}" (change)="printConnected($event.target.value)" name="etat" id="etat" class="form-control"> 
      <option value="0">Not connected</option> 
      <option value="1">Connected</option> 
     </select> 
     <div *ngIf="changed">You've selected {{isConnected}}<div>` 
}) 
export class AppComponent { 

    isConnected : number = 1; 
    changed : boolean = false; 
    printConnected(value){ 
this.isConnected = value; 
this.changed=true; 
    } 

} 

あなたはhttp://plnkr.co/edit/xO2mrTdpTGufkgXqdhYD?p=previewの例を見ることができます

関連する問題