Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.2K
Views
Angular: mat-error no funciona en el validador personalizado

No puedo implementar correctamente el cambio de estilo mat-error cuando la entrada de fecha de finalización de DatePicker es menor que la entrada de fecha de inicio. El botón puede reconocer que la entrada no es válida al deshabilitarse, pero no se producen cambios de estilo de error en 'fecha_finalización'.

Código:

 <mat-error *ngIf="userAddressValidations.hasError('validator')"> End date must be greater than start date. </mat-error>

Mi objetivo es mostrar este mensaje de error cuando el validador personalizado detecta el error.

Este es mi código de muestra completo:

apilar

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Un mat-error solo funciona para errores en los controles, no para errores en formGroup.

Pero antes de cambiar su dateCheck para devolver un objeto con propiedad "validador", no "fecha"

 function dateCheck(): ValidatorFn { return (control: AbstractControl): { [key: string]: boolean } | null => { if ( control.value.end_date && //<--check only if has value, not !==undefined (isNaN(control.value.end_date) || control.value.end_date < control.value.start_date) ) { return { validator: true }; //<--see that it's "validator" } return null; }; }

Luego crea un customErrorMatcher

 export class DateEndMatcher implements ErrorStateMatcher { isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean { const isSubmitted = form && form.submitted; //see the comparision return !!(control && (control.invalid || form.invalid) && (control.dirty || control.touched || isSubmitted)); } }

Y declara en tu .ts

 endDateMatcher = new DateEndMatcher();

Y usar en el .html

 <input matInput [matDatepicker]="picker2" formControlName='end_date' [errorStateMatcher]="endDateMatcher">

Puedes ver en tu stackblitz bifurcado

NOTA: En el nuevo material angular, tiene un selector de fecha de rango

Actualice hay otro enfoque que usa SetErrors

 function dateCheck(): ValidatorFn { return (control: AbstractControl): { [key: string]: boolean } | null => { if ( control.value.end_date && (isNaN(control.value.end_date) || control.value.end_date < control.value.start_date) ) { //indicate that setErrors control.get('end_date').setErrors({validator:true}) return { validator: true }; } if (control.value.end_date) control.get('end_date').setErrors(null) //<--put the setErrors to null return null; }; }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!