¿Hay alguna razón por la cual agregar un validador sobrescribe el validador asíncrono existente?
Uso Angular 12 y addValidator() en formGroup. Los documentos dicen: "sin afectar a otros validadores".
Tan pronto como agregué el validador, el validador asíncrono ya no se disparó.
public testValidator(): AsyncValidatorFn { return (control: AbstractControl): Observable<ValidationErrors | null> => { return of({wrongAuthority: 123}); } } public authorityValidator(control: AbstractControl) { return {wrongAuthority: 12333}; } this.form = this._fb.group({...}, { asyncValidators: this.testValidator()}); this.form.addValidators(this.authorityValidator); this.form.updateValueAndValidity();La investigación del código Angular proporciona algunos resultados:
(this as {errors: ValidationErrors | null}).errors = this._runValidator(); (this as {status: FormControlStatus}).status = this._calculateStatus(); if (this.status === VALID || this.status === PENDING) { this._runAsyncValidator(opts.emitEvent); }Como puede ver, el validador de sincronización se ejecuta primero y establece el estado de control, luego, si arroja un error, el validador de sincronización es ignorado por el valor del estado. Eso tiene sentido.