2016-12-01 23 views
7

Angular2のFormGroup.patchValue()は新しい要素を配列にプッシュしないようですか?このようなAngular2 patchValue配列への値の挿入

たとえば何か:

ngOnInit() { 

    this.form = this.formBuilder.group({ 
     animal: [''], 
     school: this.formBuilder.group({ 
      name: [''], 
     }), 
     students: this.formBuilder.array([this.formBuilder.control('Bob')]) 
    }); 

    setTimeout(() => this.form.patchValue({ 
     animal: 'cat' 
     school : {name: 'Fraser'}, 
     students: ['Bob gets edited', 'This will not show'] 
    }), 250); 

} 

ウィルだけ更新「学生」の最初の要素が、それは第二の要素を挿入しませます。

両方の要素を表示するには、どうすればよいですか?

Plunker here

答えて

4

.patchValue()は、既存のFormArrayを更新するだけで、フォームモデルの構造は変更されません。

patchValue(値:任意[]、{onlySelf、emitEvent}?:{onlySelf?:ブール、 emitEvent?:ブール}):ボイドパッチFormArrayの値。 は、コントロールの構造に一致する配列を受け入れ、 はグループ内の正しいコントロールに値を一致させるために最善を尽くします。

エラーをスローすることなく、アレイのスーパーセットとサブセットの両方を受け入れます。

実際にはを入力する必要があります。新しい要素を配列に表示するには、を押してください。

this.form.controls['students'].push(new FormControl('This will not show')); 

silentsodは、それが不可能である、と述べたように、これは、すべてのFormArrayドキュメントでまあhttps://angular.io/docs/ts/latest/api/forms/index/FormArray-class.html

+1

それはどのように事前にプッシュするどのように多くのフォームのコントロールを知ることができるのですか? – kostia

+0

良い質問@kostia。あなたはそれを理解できますか? – MeMeMax

8

です。現在、私は代替として、以下の使用しています:

 let controlArray = <FormArray>this.form.controls['apps'];   
     this.list.forEach(app => { 
        const fb = this.buildGroup(); 
        fb.patchValue(app); 
        controlArray.push(fb); 
      }); 

角度チームを - 私たちは、コレクション/オブジェクトグラフからパッチうPatchArray()のような新しい機能の何かが必要。基本的な使用例です。

-1

まあ、私が見つけた解決策は以下のとおりです。

this.myForm.controls['array'] = this.formBuilder.array(newArray.map(i => this.formBuilder.group(i))); 
関連する問題