2017-12-07 16 views
0

私は反応型フォームをFormBuilderを使用してインスタンス化しました。このフォームを使用して、新しい従業員を更新または追加したいと考えています。私は現在選択されている従業員があるかどうかを確認し、その従業員のインターフェースフィールドをフォームの値として使用しているかどうかを確認する式をformBuilderコンストラクターに追加しようとしています。特定のFormControlの値として返します。私editEmployee機能で角度反応型フォームのFormControlを動的値にバインド

'EMP_NM': [this.selectedEmp ? this.selectedEmp.EMP_NM : '', Validators.required], 

、その後を::

editCashier(employee: IEmployee) {  
    this.selectedEmp = employee;  
    this.empForm.reset();  
    console.log(this.selectedEmp.EMP_NM); 
} 

私はこれを行うとHTMLでEMP_NM入力フィールドに表示される値は取得していない私が試したものを

更新しました。私は私のeditEmployee関数でsetTimeout()を設定しようとしましたが、どちらもうまくいきませんでした。何がここで間違っているかもしれないか?

formBuilderのグループ関数を使用して、コンポネントのコンストラクタ内のempFormを初期化します。それを別の関数に移動してから、editEmployee関数が呼び出されてフォームを再初期化するたびにその関数を呼び出すと役立ちますか?

答えて

0

あなたはpatchValueかのsetValueでそれを更新することができます。

this.empForm['controls']['employee'].patchValue(employee); 

それは、ネストされたコントロールですが、あなたがダウンしてより多くの層に行くことができるかどうか見当もつかない。

+0

フォームに約30種類のフォームコントロールがあると、それほど実用的ではありません...従業員が存在する場合はフォームをバインドする方法はありませんか、空の値ですべてのコントロールを初期化する方法はありますか? – user2094257

+0

次に、 'Object.getOwnPropertyNames(yourNewFOrmValues).map((key:string)=> {//キーはあなたのコントロールです')で何かが必要です。これはフォームの配列を使ってループして値を設定する方が簡単です。 – Swoox

関連する問題