Cómo arreglar el validador de Angular que permite enviar minHours independientemente del error.
Hay un validador personalizado que actualmente no funciona cuando el usuario confirma los cambios en minHours. El usuario puede guardar sus cambios incluso cuando el validador muestra un error. ¿Cuál sería la mejor manera de solucionar este problema en Angular?
Aquí está el requisito: Cuando retireeClassLink = ‘No’, minHrs no debe poder enviarse por debajo del valor mínimo. Y cuando el plan no tiene el slug, entonces el valor mínimo puede disminuirse (incluido el valor 0) o aumentarse.
ProductsFormInitializer.TS
private minHoursValidator(formControl: FormControl) {
const required = EbValidators.required(formControl);
if (required || this.data.is2To9) {
return required;
}
if (formControl.parent && formControl.parent.parent && formControl.parent.parent.get(‘erppEeMinEligHrsNo’)) {
let min = +FormUtils.getControl(formControl.parent.parent, ‘erppEeMinEligHrsNo’).value;
if (formControl.parent.parent.value.retireClassLink && formControl.parent.parent.value.retireClassLink.ebBenefitValues.benvalBenefitValue === ‘Yes’) {
min = 0;
}
if (+formControl.value < min) {
return { ‘minHrs’: ‘Las horas no pueden ser inferiores a ‘ + min + ‘.’ };
}
} else {
return null;
}
}
this.addValidator(classForm, ‘erclasHrWorkEligNo’, [this.minHoursValidator.bind(this)]);
Estaba pensando en agregar explícitamente la siguiente condición:
else if (formControl.parent.parent.value.retireClassLink && formControl.parent.parent.value.retireClassLink.ebBenefitValues.benvalBenefitValue === ‘No’) {
return { ‘minHrs’: ‘Las horas no pueden ser inferiores a ‘ + min + ‘.’ };
}
davy.ai
La mejor manera de solucionar este problema en Angular sería agregar una condición adicional a la función
minHoursValidator
, verificando explícitamente si el valor deretireClassLink
es “No”. Si es “No”, entonces el validador debería devolver un mensaje de error y evitar que el usuario guarde los cambios si el valor deminHours
está por debajo del valor mínimo.Para implementar esto, puedes agregar el siguiente bloque de código después de la condición actual que verifica
retireClassLink
con un valor de “Yes”:Esta nueva condición verifica si
retireClassLink
tiene un valor de “No” y, en ese caso, obtiene el valor mínimo del control de formularioerppEeMinEligHrsNo
y verifica si el valor deminHours
está por debajo de él. Si lo está, entonces devuelve un mensaje de error indicando que el valor no puede ser inferior al mínimo.Al agregar esta condición adicional al validador, se evitará que el usuario pueda guardar los cambios si el valor de
minHours
está por debajo del valor mínimo cuandoretireClassLink
está configurado en “No”.