2017-08-31 10 views
1

私はAngular4より特異的な反応型を学んでいます。私はヒーローズのデモを実行していた、と私は何かに立ち往生した。Angular4のFormGroupを元の状態にリセットするにはどうすればいいですか?

この場合、Plunkerスーパーヒーローを選択する必要があり、ヒーローのアドレスが表示されます。私は各アドレスのリセットボタンを追加しましたが、アドレスをリセットするためにクリックすると、すべてがリセットされます。

我々が持っている例では:

createForm() { //Set up form and array of addresses 
    this.heroForm = this.fb.group({ 
     name: '', 
     secretLairs: this.fb.array([]), 
     power: '', 
     sidekick: '' 
    }); 
    } 

    //Function to revert changes 
    revert() { this.ngOnChanges(); } 

    //This function will set the name from original object 
    ngOnChanges() { 
    this.heroForm.reset({ 
     name: this.hero.name 
    }); 

    //It will reload the form array with original values 
    this.setAddresses(this.hero.addresses); 
    } 

    //Create new formgroups and add to formArray 
    setAddresses(addresses: Address[]) { 
    const addressFGs = addresses.map(address => this.fb.group(address)); 
    const addressFormArray = this.fb.array(addressFGs); 
    this.heroForm.setControl('secretLairs', addressFormArray); 
    } 

これはokです、それは動作しますが、それはフォーム全体をリセットします。たとえば、Whirlwindには2つのアドレスがあります。新しいアドレスを追加した後、最初のアドレスに変更を加えます。私は間違いを犯して元の値を取得したい、リセットボタンをクリックすると、新しいアドレスが削除され、フォームのすべてのデータがリセットされます。

フォーム全体ではなく、アドレスごとにリセットするにはどうすればよいですか?

おかげ

+1

も参照してください。私はあなたが達成したいことを理解しているかどうかはわかりません。例のようなユーザーストーリーはいかがですか?何が起こり、何が起こると思いますか? –

+0

何かが見逃された場合はお詫び申し上げます。私が行った変更を取り消し、以前の値をロードしたい。たとえば、最初のアドレスがロードされ、そこに何か入力が始まります。リセットをクリックすると、フォーム全体ではなく、その特定のアドレスの元の値が表示されます。 – UncleFester

答えて

1

あなたは、初期化後の値を読み取るためにvalueまたはgetRawValue()を使用することができます。

reset()の後、setValue()を使用して初期値を戻すことができます。

は、なぜあなたは、変更のリセットを呼び出している?

+1

私はそれを配列でアイテムで行うことができると考えていましたが、フォームグループ全体を再バインドする必要があるようです。 – UncleFester

+0

私が見たことから、あなたは 'reset'を使って元のデータをすべて渡すことができます。あるいは、' setValue'や 'patchValue'を使うこともできます。また、私は、 'reset'はリセット時にFormArray要素の正しい数を現在作成していないことを理解しています。 Angular github repoに掲載されている問題があります。あなたが本当に一つの値だけをリセットしたいのであれば、 'patchValue'があなたが望むものかもしれません。 – DeborahK

+1

興味のある方は、こちらのフォーム(https://github.com/DeborahK/Angular2-ReactiveForms)(APMフォルダ内)に反応的なフォームを使用したサンプルアプリケーションがあります。ユーザが編集する新しい項目を選択するたびに、フォーム上のデータを更新するために 'patchValue'を使います。同様の方法でリセットすることができます。 – DeborahK

関連する問題