Vraag Angular2: Hoe markeer je de FormGroup-controle vies via `patchValue ()`


Ik ben bezig een reactief bij te werken FormGroup stuur waarde van mijn component via patchValue.

Ex:

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

Dit werkt geweldig en triggert een valueChanges evenement, maar deze controle is dirty eigendom is nog steeds false.

ik heb de nodig incidentDate controle te zijn dirty dus mijn validatielogica weet tegen deze controle aan te lopen.

Hoe kan ik de waarde van een besturingselement van mijn component bijwerken EN aangeven dat het vies is?

Dit is mijn validatielogica:

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

11
2017-10-01 03:56


oorsprong


antwoorden:


Ik doe dit meestal:

this.formControl.markAsDirty()

Of in jouw geval zou het kunnen zijn:

this.myForm.get('incidentDate').markAsDirty()

26
2017-10-01 04:19



Als u een groep of array hebt die u als vies moet markeren, kunt u dit gebruiken

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

U kunt de SuperForm npm-pakket om dat voor je te doen.


1
2017-08-11 10:38