2017-06-19 1 views
0

Je construis mon FormGroup de la manière suivante:angulaire 2+ ReactiveForm Validation personnalisée Fonction non Déclenché

this.datesGroup = this.fb.group({ 
 
    arrivalDate: [null, Validators.required], 
 
    departureDate: [null, Validators.required] 
 
}, (fg: FormGroup) => { 
 
    console.log('validate'); 
 
    return moment.unix(fg.value.departureDate.epoc).diff(moment.unix(fg.value.arrivalDate.epoc)) > 0 ? 
 
    null : { 
 
     'departureBeforeArrival': true 
 
    }; 
 
}); 
 
this.formGroup = this.fb.group({ 
 
    dates: this.datesGroup, 
 
    accommodation: ['', Validators.required] 
 
});

Mais la fonction de flèche de validation n'est jamais déclenché ci-dessus; la console ne se connecte jamais. Qu'est-ce que je fais mal?

Répondre

1

méthode FormBuilder.group prend 2 paramètres:

group(controlsConfig: { 
     [key: string]: any; 
    }, extra?: { 
     [key: string]: any; 
    } | null): FormGroup; 

extra peut être object avec la propriété validator et/ou asyncValidator.

donc je changer votre code à ceci:

this.datesGroup = this.fb.group({ 
    arrivalDate: [null, Validators.required], 
    departureDate: [null, Validators.required] 
}, { 
    validator: (fg: FormGroup) => { 
    console.log('validate'); 
    return 1 > 0 ? 
     null : { 
     'departureBeforeArrival': true 
     }; 
    } 
}); 

Un exemple concret n'a pu être trouvée ici https://plnkr.co/edit/BcExweMVcVxy1yKhwmJp?p=preview

+0

+1 :). Je pense que le [** docs **] (https://angular.io/api/forms/FormBuilder#overview) pourrait mieux expliquer ce que ce "extra" signifie, comme c'est le cas pour 'FormControl' et' FormArray'. (Je sais que c'est bien expliqué dans 'FormGroup', mais cela devrait aussi être dans' FormBuilder'). – developer033