2016-10-01 29 views
9

aracılığıyla kirli olarak işaretler misiniz? patchValue aracılığıyla bileşenimden bir Reaktif FormGroup denetim değerini güncelleştiriyorum.Angular2: Form Patch kontrolünü "patchValue()"

Ör: Bu harika çalışıyor ve bir valueChanges olayı tetikler

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

, ancak bu denetimin dirty özellik hala false olduğunu.

incidentDate denetiminin dirty olmasını istiyorum, bu nedenle doğrulama mantığım bu kontrole karşı çalışmayı bilir.

Bir kontrolün değerini bileşenimden nasıl güncelleştiririm VE bunun kirli olduğunu gösterir miyim?

this.formControl.markAsDirty() 

Veya

senin durumunda bu olabilir:

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

cevap

19

: Burada

benim doğrulama mantığı kirli olarak işaretlemek istediğiniz dizi bu

kullanabilirsiniz
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); 
    }) 
    } 
} 

Bunu sizin için SuperForm npm package kullanabilirsiniz.

+0

Sen benim arkadaşımsın, adamsın. Merak ettim, bunu nerede buldunuz? Https://angular.io/docs/ts/latest/api/forms/index/FormControl-class.html – rynop

+2

adresinde nerede bulunacak bir yer bulamıyorum. Https://github.com/angular/angular /blob/master/modules/%40angular/forms/src/model.ts lol –

+0

İnsanların beni doğrudan kaynak koduna almasını seviyorum. – Hinrich

1

Bir grubu varsa veya Bunu genelde

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