2017-07-25 9 views
0

私は編集モードで開いて適切なデータで初期化するformGroupを持っています。 また、この初期データをeditFormに保存します。各フォームコントロールを個別に設定しなくても、角度2の初期化データをリセットする

それに変更を行った後、私は初期値に対するすべての変更、のようなものをリセットしたい:

this.formGroup.reset(this.staffToEdit); 

をしかし、このすべては、あらゆる分野での空白入れているん。私が見つけた唯一の回避策は

this.formGroup.reset({field1 : this.editForm.field1}); 
... 

事は、私は各formControlを経由しなくても初期値にすべてのフィールドをリセットし、より汎用的なものが必要であるような何かを行うことです。

これは可能ですか?

答えて

1

私が行うのは、最初の値の参照を保持し、markAsPristine()と一緒に呼び出してを呼び出すだけで、すべてのフォームの値を最初のものに戻し、フォーム全体を初期状態に戻します。

const initialFormValues { 
    firstname: 'Joe', 
    surname: 'Doe' 
}; 

... 

reset() { 
    this.formGroup.patchValue(initialFormValues); 
    this.formGroup.markAsPristine(); 
} 

または私はそれはあなたのケースでのようになります推測しているように:

reset() { 
    this.formGroup.patchValue(this.editForm.value); 
    this.formGroup.markAsPristine(); 
} 
+0

これは私がいくつかのフォームを持っていて、各フォームでそれを実装する必要がない一般的な方法が必要だったので避けることを望んだものです。しかし、私が見つけた限り、唯一の方法だと思われます。 – Fofole

+0

@Fofole私はあなたの特定のユースケースでより一般的な、リサーチ複数のフォームを処理するために観測可能なイベントストリームでヘルパーサービスを作成することができると思います。私が知っている限り、角度自体は複数の形のケースでそれを行うためのそれ以上の一般的な方法を提供しません。アプリケーションでのフォームの作成および管理の仕組みやフォームデータの構造について詳しく知ることなく、これ以上のヘルプを提供することは困難です。 – jgranstrom

+0

あなたの助けていただきありがとうございますが、私のコードでこの問題を発見し、答えとして投稿しました。 – Fofole

1

[OK]をので、これは奇妙な相互作用だったが、私は最終的にそれを修正しました。私は、フォームの外ボタンを引っ張った後、私はちょうどngOnInit後に私の初期値を保存し、

<form .. > 
    ..... 
    <div> 
    <button id="resetButton" 
      type="reset" 
      class="btn btn-primary" 
      (click)="resetFormData()"> Reset 
    </button> 
    </div> 
    </form> 

this._originalData = this.formGroup.value; 

その後を

は当初、私は、フォーム内の私のリセットボタンを持っていましたリセットしたいときに使用する

protected resetFormData() { 
     this.formGroup.setValue(this._originalData); 
    } 

ボタンをフォームに残しておくと、それを使用できませんoフォームコントロールの値を更新する!

+0

あなたの問題は、ボタンのタイプが「リセット」で、デフォルトのHTMLリセット動作が発生することです。すなわち、すべての入力をデフォルト値(空白またはそれ以外)に設定します。 –

関連する問題