Estoy tratando de establecer un estado de control de formulario en válido
this.currencyForm.controls['currencyMaxSell'].setErrors({smallerThan: true})ahora quiero eliminar este error.
Otras soluciones parecen no funcionar. Parece que angular piensa que el control no es válido siempre que la propiedad de errores no sea nula.
Siempre que desee eliminar un solo error y dejar otros, no hay forma de hacerlo sino manualmente. Esta función eliminará solo un error especificado en el argumento y dejará otros. También se asegurará de que si elimina el último error, el control será válido.
// call it in validator function if control is valid removeError(this.currencyForm.controls['currencyMaxSell'], 'smallerThan'); // this function removes single error function removeError(control: AbstractControl, error: string) { const err = control.errors; // get control errors if (err) { delete err[error]; // delete your own error if (!Object.keys(err).length) { // if no errors left control.setErrors(null); // set control errors to null making it VALID } else { control.setErrors(err); // controls got other errors so set them back } } } // this function adds a single error function addError(control: AbstractControl, error: string) { let errorToSet = {}; errorToSet[error] = true; control.setErrors({...control.errors, ...errorToSet}); }Para eliminar solo un error de control de formulario al realizar la validación manual, haga lo siguiente:
this.myFormGroup.get('myControl').setErrors({'myCustomError':null}) Esto solo actualizará el valor del error especificado y no borrará ninguna validación anterior que haya realizado, a diferencia de setErrors(null) , que anula todo el objeto de errores para el control.
AFAIK, realmente no necesita usar el método setErrors cuando puede crear validadores personalizados . Puede crear fácilmente validadores personalizados para su formControl o formGroup y dentro de su validador solo necesita devolver un ValidatorFn y no debe usar el método setErrors .
Para obtener más información sobre el validador personalizado para FormGroup, le sugiero que lea este artículo que resolvió mi problema.
Este es mi código de trabajo:
registerationForm = this.formBuilder.group({ username: ['', [Validators.required, Validators.email]], passwords: this.formBuilder.group( { password: ['', Validators.required], confirmPassword: ['', Validators.required] }, { validator: matchPassword } ), policyAgreement: ['', Validators.required] }); // Outside my component: const matchPassword = (group: FormGroup) => { const password = group.get('password').value; const confirmPassword = group.get('confirmPassword').value; return password != confirmPassword ? { matchPassword: true } : null; };