angularangular-reactive-forms

Get name of Form Control


I'm working with reactive forms in angular, I need to compare the start date "start date" with the end date "end date", both controls are validated in the "dateLessThan" function, but the problem is that I do not know how to ask for control is evaluating

//Some stuff
public fechaInicio = new FormControl('', [
    Validators.required    
    , this.dateLessThanTo

]);
public fechaFin = new FormControl('', [
    Validators.required     
    , this.dateLessThan
]);



 createForm() {
    this.contratoForm = this.formBuilder.group({    
        fechas: this.formBuilder.group({
            fechaInicio: this.fechaInicio,
            fechaFin: this.fechaFin
        }, { validator: this.dateLessThan('fechaInicio', 'fechaFin') }),          

    });
}

Here I Need to know the name of control for compare dates:

 dateLessThanTo(fieldControl: FormControl) {
    //
    //if (fechaInicio.value > FechaFin.value){
    //      return true;
    //}
    //else{
    //  return false;
    //  }

}

//Some stuff

Solution

  • In your custom validator, you get the formGroup fechas, so you do not need to pass any parameters from the TS code:

     createForm() {
        this.contratoForm = this.formBuilder.group({    
            fechas: this.formBuilder.group({
                fechaInicio: this.fechaInicio,
                fechaFin: this.fechaFin
            }, { validator: this.dateLessThanTo }),          
    
        });
    }
    

    and in your custom validator:

    dateLessThanTo(group: FormGroup) {
       if (group.controls.fechaInicio.value > group.controls.fechaFin.value){
         return {notValid: true}
       }
       return null;
    }
    

    You need to return null when valid, and set an error, e.g notValid when it's not.