2016-05-20 10 views
0

カスタムコントロールグループで動作する角度2のフォームがあります。現時点でフォームを提出すると、次の行のすべてのデータがコントローラに渡されます。コントロールグループ内のダーティ値のみを取得する角度2

(ngSubmit)="updateArtist(artistDetailForm.value)" 

問題は、これがフォームのすべての値を渡し、フォームがかなり大きい場合、これは全く役に立たないと感じることです。変更された(汚れた)値だけを渡す可能性はありますか?

答えて

1

フォームを宣言してください。

this.artistDetailForm= formBuilder.group({......}); 

提出

// feed me controlGroups 

getDirtyValues(cg) { 
    let dirtyValues = {}; // initialize empty object 
    Object.keys(cg.controls).forEach((c) => { 

    let currentControl = cg.find(c); 

    if(currentControl.dirty){ 
     if(currentControl.controls) //check for nested controlGroups 
      dirtyValues[c] = getDirtyValues(currentControl); //recursion for nested controlGroups 
     else  
      dirtyValues[c] = currentControl.value; //simple control 
    } 

    }); 
    return dirtyValues; 
} 

に値を抽出し、その後、私は少しまし角度フォームへの新しい変更により、この

(ngSubmit)="updateArtist(getDirtyValues(artistDetailForm))" 

PLUNKER

0

を行うための関数を定義します。受け入れられた答えを修正しました。誰かが興味を持っていると分かち合うことを決めた。 (角4+を使用)

getDirtyValues(form: any) { 
     let dirtyValues = {}; 

     Object.keys(form.controls) 
      .forEach(key => { 
       let currentControl = form.controls[key]; 

       if (currentControl.dirty) { 
        if (currentControl.controls) 
         dirtyValues[key] = this.getDirtyValues(currentControl); 
        else 
         dirtyValues[key] = currentControl.value; 
       } 
      }); 

     return dirtyValues; 
} 
関連する問題