2017-06-02 5 views
1

に基づく新しいフォームを作成しますのは、この(私の本当の形が複雑である)のように、フォームを持っているとしましょう::別のフォーム

this.group = this.formBuilder.group({ 
    name: '', 
    email: '' 
}); 

マイフォーム構成は、これまでの作品...今私は」フォームをAPIに提出する前にいくつかの値を変更したいのですが、元のフォームの参照と値をそのまま残しておきたいので、フォームを複製することをお勧めします。

const cloneGroup = this.formBuilder.group(this.group.controls); 
// Shouldn't it create a form with a new reference, 
    since it creates a new FormGroup internally? 

問題は、私はcloneGrouppatchValueメソッドを呼び出した後、this.groupも変化することであり、私がしたいOFCのみのクローンを変更する:だから私はこのようにそれをやろうとしています。

ここでは、私の質問をより良く見るために遊ぶことができるdemoです。

質問は:なぜ?私が新しいフォームを作成したのであれば、本当にという新しいフォームを作成するはずですか?

PS:上記で説明したように、私はこれだけ価値をクローニングし、私は(フォーム自体のいくつかのメソッドを呼び出すために)元のフォームの参照と値を維持したいので、値のみのクローンを作成する必要はありませんオプションではありません。

+0

あなたは 'formGroup'をクローンする方法を見つけることができましたか? 私もこの正確な時点で立ち往生しています。 – Thodoris

答えて

0

フォームのクローン作成で何を達成しようとしているのかよく分かりませんが、2つの独立したフォームの作成に専念している場合 クローンを作成するアプローチの1つは、フォームの設定ではなく、フォームでのコントロールです。次に、getValuesetValueをクローンに対して使用して、オリジナルの値でクローンを更新してからクローンを変更することができます。あなたはクローンリアルタイムに同期する元の形で維持する必要はありませんが、代わりに特定でそれを更新することができたら、上記のアプローチは、正常に動作する必要があり

let formConfig = { 
    name: '', 
    email: '' 
}; 

this.group = this.formBuilder.group(formConfig); 
this.clone = this.formBuilder.group(formConfig); 

....... 

// and then later when you want to use the clone 
this.clone.setValue(this.group.getValue()); 

// and then you can update your clone.. 
this.clone.patchValue(....); 

だから、あなたのような何かを行うことができます時間。リアルタイム同期が必要な場合は少し複雑になりますが、同じ基本ロジックが適用されます。元のvalueChangesに登録し、各イベントでクローンを更新します。

+0

あなたの答えをありがとう...まあ、問題のフォームは単なる例に過ぎませんでした。説明したように、いくつかのコントロールを削除したり、いくつかの値を修正したりする前に、フォームをクローンしてAPIに送る前にいくつかの変更を実行したいのですが...私はなぜこのように新しいフォームを作成するのだろうかと思います: 'this.formBuilder.group(。 ..) 'はうまくいかない、というのはなぜ...元のフォームの参照を維持しているのか。 'this.formBuilder.group'が' new FormGroup(...) 'を内部的に呼び出すので、それは変ですか? –

+0

ええ、フォームコントロールの設定情報を新しいフォームに渡すのではなく、既に作成したフォームコントロールへの参照を渡しています。したがって、それらが "共有"されている理由 - まったく同じフォームコントロールオブジェクトの異なるグループを作成しているだけです。 – snorkpete

+0

Humm ..一言で言えば、元のフォームの参照を維持せずにformGroupを複製する方法はありますか? –

関連する問題