2016-05-10 4 views
4

Angular 2フレームワークの新機能です。私はどんな助けにも感謝します。ng-modelなしで角度2のフォームで元のプロパティをプログラムで変更する方法

私は角2での通常の構成要素を持っている:

import {FORM_DIRECTIVES, FormBuilder, Validators} from 'angular2/common'; 

export class TestComponent { 
    public values = ['value1', 'value2', 'value3', 'value4']; 
} 

それから私は、コンストラクタ関数へFormBuilderを注入しています:

<input [(ngModel)]="formData.title" type="text" class="form-control" ngControl="title"> 

@Inject(FormBuilder) public fb 

HTMLは次のマークアップが含まれています

タイトルと説明は素晴らしい作品です。 しかし、私はブートストラップのドロップダウンを追加しました。にはフォーム要素がありません。

<div *ngFor="#value of values" (click)="onValueChanged(value)" class="dropdown-item">{{value}}</div> 

したがって、問題は、htmlマークアップにモデルが含まれていないことです。私はこの問題を解決しようとした 方法はonValueChanged

onValueChanged(value){ 
    this.formData.controls.value.updateValue(value); 
    this.formData.value = value; 
    console.log(this.formData.pristine) //Still true :(
} 

関数を作成することであるドロップダウンが変更された後this.formData.pristineが変化しないため、これらの行の両方が、機能していません。

今の私はFormBuilderを更新する方法を考えている、あなたが現在の可能性は非常に限られている

this.formData.controls.value.markAsDirty(); 

を使用してpristineステータスを削除することができます例this.fb.update()

答えて

7

のために、いくつかのメソッドを持っていいと思い。も参照してくださいhttps://github.com/angular/angular/issues/4933

+2

ありがとう、それは動作します! –

+0

これがあなたの質問に答えるならば、問題が解決したことを示す回答を受け入れてください。代わりの回答を待つ場合は、それを受け入れる必要はありません。あなたはまた、いつでも受け入れられた答えにもう一度答えを出すことができます。 –

+0

@GünterZöchbauerテンプレート駆動フォームで同じことを行う方法は? '#myForm =" ngForm "'のように宣言されたフォームを持っていて、関数内の 'myForm.form.controls.value'にアクセスすると' undefined'が返されます! – yashhy

関連する問題