2016-11-17 15 views
1

私はチェックボックスとして表されるいくつかのインジケータを持つフォームモデルを持っています。現在、オブジェクトjsonの形式でtrue/falseとして値をモデル化しています。私が望むのは、その値がブール値から1/0にそれぞれ変換することです。これを行うにはスマートな方法がありますか?角2反応的フォームチェックボックス - 数値をBoolにバインド

例コード:

@Component 

template: ` 
    <form [formGroup]="myForm" (ngSubmit)="save(myForm.value)"> 
     <input type="checkbox" id="myToggle" formControlName="myToggle"/> 
    </form> 
` 
export class MyComponent implementes OnInit{ 
private myForm:FormGroup; 
myToggle: number; 

constructor(private _fb:FormBuilder) {} 

ngOnInit() { 
    this.myForm = this._fb.group({ 
     myToggle: [0] 
    }); 
} 

は、うまくいけば、上記のは、私は数に「myToggle」のタイプを設定しようとしていることを実証しています。フォームを初期化すると、デフォルト値は0に設定され、チェックボックスはチェックされません。しかし、チェックボックスをオンにすると、フォームの値が1ではなく真に設定されます。これを1に更新します。this questionブール値を数値に変換するオプションがいくつかあります。しかし、私は反応形式モデルでこれをどのように実装するのか正確にはわかりません。

答えて

1

FormControlにはregisterOnChangeメソッドがあります。これにより、変更するたびに実行されるコールバックを指定できます。

例を挙げると、コントロールlet ctrl = this.myForm.controls["myToggle"]にアクセスできます(手動で作成することをお勧めします)。ctrl.registerOnChange(() => ctrl.patchValue(ctrl.value ? 1 : 0));のようにsthを実行できます。

+0

initの形式でこれを使用する方法はありませんか? formGroups、formArraysなどをどこで定義していますか?私が真実/虚偽の指示フィールドを30個持っている場合、これは些細なことをする余分なコードのようです。 –

+0

実際の基礎となるHTMLがチェックボックスを指定しているので、それは自明ではありませんチェックされた値はブール値です。 https://www.w3.org/wiki/HTML/Elements/input/checkbox たとえば、name( 'name.indexOf(" chk ")!== -1'など、あなたのコントロールをループすることができますか? )、関数を何度も繰り返し適用します。 – silentsod

+0

あなた自身の関数 'createNumberCheckbox(formState ?: any、validator ?: ValidatorFn | ValidatorFn []、asyncValidator ?: AsyncValidatorFn | AsyncValidatorFn [])を作成する必要があります:FormControl {let result = new FormControl(formState、validator、asyncValidator); result.registerOnChange/*私の答えからのもの* /;結果を返す} 'してから使用してください。 init内やどこでもmyToggle:createNumberCheckbox(0)と似ています。 – mat3e