tengo este codigo:
this.form = fb.group({ username: ['', Validators.compose([Validators.required])], fullName: ['', Validators.compose([Validators.required])], password: ['', Validators.compose([Validators.required])], confirmPassword: ['', Validators.required], }, {validator: matchingPasswords('password', 'confirmPassword')});Contraseñas coincidentes:
export function matchingPasswords(passwordKey: string, passwordConfirmationKey: string) { return (group: FormGroup) => { let password = group.controls[passwordKey]; let passwordConfirmation = group.controls[passwordConfirmationKey]; if (password.value !== passwordConfirmation.value) { return passwordConfirmation.setErrors({mismatchedPasswords: true}) } }}
html:
<div class="form-group"> <input [formControl]="confirmPassword" class="form-control checking-field" type="password"> <span class="help-block text-danger" *ngIf="form.get('password').touched && form.get('password').hasError('required')"> </div> <div class="form-group"> <input class="custom-control-input checkbox-main" type="checkbox" [(ngModel)]="policyButtonValue" [ngModelOptions]="{standalone: true}" ngDefaultControl> <span class="custom-control-indicator"></span> </div>esto es funcional y funciona perfectamente, pero tengo un caso de uso especial que debería solucionarse.
hasta este punto, sin problemas.
¿Hay alguna manera de forzar la ejecución de la validación de la contraseña coincidente en el evento keyup, en lugar de cómo funciona ahora?Necesitas un bloque else :
if (password.value !== passwordConfirmation.value) { passwordConfirmation.setErrors({mismatchedPasswords: true}) } else { passwordConfirmation.setErrors(null); }