2016-10-01 2 views
9

patchValueを介してReactive FormGroupコントロール値をコンポーネントから更新しています。Angular2: `patchValue()によってFormGroupコントロールのダーティーをどうやってマークするのですか?

例:これは素晴らしい作品とvalueChangesイベントをトリガ

this.myForm.patchValue({incidentDate:'2016-09-12'); 

が、しかし、このコントロールのプロパティdirtyはまだfalseです。

コントロールがdirtyになるように、私はincidentDateのコントロールを必要とします。したがって、このコントロールに対して検証ロジックが実行されることがわかります。

コンポーネントからコントロールの値を更新し、そのコンポーネントが汚れていることを示すにはどうすればよいですか?

this.formControl.markAsDirty() 

それとも

は、あなたの場合にはそれができる:

(this.myForm.controls['incidentDate'] as FormControl).markAsDirty() 

答えて

19

:ここ

は私の検証ロジックでありますあなたがこれを使用することができる汚れとしてマークする必要がある配列

export class Helpers { 
/** 
    * Loop and touch all it has 
    * 
    * @param {FormGroup} formGroup 
    * @param func << function name: [markAsTouched, markAsUntouched, markAsDirty, markAsPristine, markAsPending 
    * @param opts 
    * 
    */ 
    public static touchAll(formGroup: FormGroup|FormArray, func = 'markAsDirty', opts = {onlySelf: false}): void { 
    mapValues(formGroup.controls, (c, i) => { 
     if (c instanceof FormGroup || c instanceof FormArray) 
     Helpers.touchAll(c, func, opts); 
     else 
     c[func](opts); 
    }) 
    } 
} 

SuperForm npm packageを使用すると、そうすることができます。

+0

あなたは私の友人です、男です。興味深い、あなたはこれがどこに文書化されているのを見つけましたか? https://angular.io/docs/ts/latest/api/forms/index/FormControl-class.html – rynop

+2

私はここにかなり頻繁に来ますhttps://github.com/angular/angular /blob/master/modules/%40angular/forms/src/model.ts lol –

+0

人々が私をソースコードに直接連れて行くのが好きです。 – Hinrich

1

あなたがグループを持っている場合、または私は通常これを行う

onValueChanged(data?: any) { 
    if (!this.myForm) { 
     return; 
    } 
    const form = this.myForm; 
    for (const field in this.formErrors) { 
     // clear previous error message (if any) 
     this.formErrors[field] = ''; 
     const control = form.get(field); 
     if (control && control.dirty && !control.valid) { 
     const messages: any = this.validationMessages[field]; 
     for (const key in control.errors) { 
      this.formErrors[field] += messages[key] + ' '; 
     } 
     } 
    } 
} 
関連する問題