2016-10-01 12 views
9

के माध्यम से फ़ॉर्मग्रुप नियंत्रण गंदे को कैसे चिह्नित करते हैं, मैं patchValue के माध्यम से अपने घटक से एक प्रतिक्रियाशील FormGroup नियंत्रण मान अद्यतन कर रहा हूं।कोणीय 2: आप 'पंचवैल्यू() `

पूर्व:

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

यह महान काम करता है और एक valueChanges ईवेंट ट्रिगर करता है, लेकिन इस पर नियंत्रण के dirty संपत्ति अभी भी false है।

मुझे incidentDate नियंत्रण dirty होने की आवश्यकता है, इसलिए मेरा सत्यापन तर्क इस नियंत्रण के विरुद्ध चलाने के लिए जानता है।

मैं अपने घटक से नियंत्रण के मूल्य को कैसे अपडेट करूं और इंगित करता हूं कि यह गंदा है?

यहाँ मेरी मान्यता तर्क है:

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] + ' '; 
     } 
     } 
    } 
}