2017-12-22 14 views
1

複数のgetを行うのではなく、フォームコントロールの配列を購読する方法はありますか。私のシナリオでは、オブジェクトに画像が表示されています。 enter image description here 私はtextfielda、textfieldbとnumbera valuechangesのみを購読したいと思います。フォーム全体のvaluechangesを購読しようとしましたが(これはうまく動作します)、高価な操作です。このフィールドは動的ですので、ngmodelを使用することはできませんどんな助けもありがとうございます。フォームコントロールの配列をサブスクライブする - 角度2/4

+1

Observable.merge'。ここでは、FormArrayの特定の要素にvalueChangesを渡すことについて数日前に説明した例を示します。必要なものを変更して入手することができます:https://stackblitz.com/edit/formarraything –

+0

箱からの角度。あなたのアプローチを深く説明できますか – dockerrrr

+1

はい。目標は、FormArrayの特定の/単一の要素に対してvalueChangesを取得することです。 FormArray ValueChangesを購読すると、Array全体がログに記録されます。それはFormArrayなので、FormControlを動的に追加したり削除したりすることができます。そのため、各コントロールをforEachで取得し、次に、control.valueChangesをobservableArrayにプッシュする必要があります。最後に、FormArrayからの変更も取得するために、 'formArray.valueChanges'をobservableArrayにプッシュします。次に、Observable.mergeを使用してこれらのvalueChangesをマージし、変更時に値を取得するために 'distinctUntilChanged'を使用します。 –

答えて

0

これは自分のコードからコピーして編集したものです。

newFormArray.push(this.fb.group({ 
    datatype: datatype, 
    value: value 
})); 

は、これらのDBに接続されたバックエンドとのAPIコールの値は以下のとおりです。

私のフォームの配列内のすべてのフォームグループはdataypeを持っています。

あなたが今やっていることです:HTMLで

this.form.valueChanges.subscribe((item: any) => { 
    if(item.array[i].datatype === 'textarea'){ //do something 
    switch (item.array[i].datatype) { // or with a switch 
     case 'textarea': 
      //do textarea 
      break; 

OFC:

あなたはまだ `を使用し、各個別制御はその後、アレイへの` valueChanges`を追加取得する必要があると思い
<div *ngIf="item.datatype === 'textarea'"> // show textarea 
関連する問題