Tengo un problema al intentar crear un validador personalizado con Angular. De hecho, para mi página de registro, creé un formulario y para verificar si la contraseña y confirmar la contraseña coincidían, quería crear un validador personalizado.
Pero enfrenté el siguiente problema (ver imagen), e incluso todas las solicitudes similares que descubrí en Internet, no solucionaron mi problema.
import { FormControl, FormGroup, Validators } from '@angular/forms'; import { USER_ATTRIBUTS } from 'src/app/globalVariable'; import { CustomValidators } from 'src/app/validators/custom-validators' export class UserFormSignUp extends FormGroup{ constructor(){ super({firstName: new FormControl('',[ Validators.required]), lastName: new FormControl('',[ Validators.required]), birthdate: new FormControl('', Validators.required), displayName: new FormControl('',[ Validators.required,]), email: new FormControl('',[ Validators.required, Validators.email]), password: new FormControl('',[ Validators.required]), confirmationPassword: new FormControl('',[ Validators.required])}, { validator: CustomValidators.passwordMatchValidator }); } get firstName() : FormControl{ return this.get('firstName') as FormControl; } get lastName() : FormControl{ return this.get('lastName') as FormControl; } get birthdate() : FormControl{ return this.get('birthdate') as FormControl; } get displayName() : FormControl{ return this.get('displayName') as FormControl; } get email() : FormControl{ return this.get('email') as FormControl; } get password() : FormControl{ return this.get('password') as FormControl; } get confirmationPassword() : FormControl{ return this.get('confirmationPassword') as FormControl; }}
Y custom-validators.ts:
import { ValidationErrors, ValidatorFn, AbstractControl } from '@angular/forms'; checkPasswords: ValidatorFn = (group: AbstractControl): ValidationErrors | null => { let pass = group.get('password')?.value; let confirmPass = group.get('confirmPassword')?.value return pass === confirmPass ? null : { notSame: true } }}
Si tienes alguna idea... te lo agradecería.
Al extender FormGroup y llamar a super con { validator: CustomValidators.passwordMatchValidator } , no cumple con la firma real del constructor de FormGroup que se supone que debe tomar un ValidatorFn simple como segundo parámetro, no incrustado en un objeto como lo hizo usted.
Prueba así:
export class UserFormSignUp extends FormGroup { constructor() { super( { firstName: new FormControl("", [Validators.required]), lastName: new FormControl("", [Validators.required]), birthdate: new FormControl("", Validators.required), displayName: new FormControl("", [Validators.required]), email: new FormControl("", [Validators.required, Validators.email]), password: new FormControl("", [Validators.required]), confirmationPassword: new FormControl("", [Validators.required]), }, CustomValidators.passwordMatchValidator ); } }