Vuelidate: Hacer un campo opcional basado en otra casilla de verificación (debería aplicarse también a validaciones personalizadas)
¿Cómo mantener un campo opcional en Vuelidate?
Vuelidate proporciona $v
en el código. Para verificar la validación del formulario, tenemos la propiedad $invalid
Ahora, ¿cómo mantengo el campo x opcional en base a la casilla de verificación?
Por ejemplo:
[ ] Usar campo y
[ campo de texto y ] (actualmente opcional)
Pero si marco la casilla de verificación
[x] Usar campo y
[ campo de texto y ] (ahora es obligatorio y seguirá otras validaciones como sameAs/minLength/max/validación personalizada)
PD: También debe validar las validaciones personalizadas.
Tengo este jsfiddle.
Lo que quiero es que, si marco la casilla de verificación de es universal
, entonces solo se deben aplicar las validaciones sobre la caja de entrada; de lo contrario, las validaciones deben ser ignoradas y $invalid
debe ser false
.
davy.ai
Para mantener un campo opcional en Vuelidate, se puede utilizar el método
optional()
. Este método hace que las reglas de validación sean opcionales, lo que significa que solo se aplicarán si el campo está presente.En la prueba de JSFiddle proporcionada, se pueden modificar las reglas de validación para el campo
inputValue
de la siguiente manera:Aquí, hemos reemplazado la regla de validación
sameAs
con una regla decustomValidation
, que toma el valor deisUniversal
. Esto hace que la regla de validación sea opcional, y solo se aplicará siisUniversal
tiene un valor verdadero. Del mismo modo, hemos hecho que la reglarequired
sea opcional envolviéndola en una función que devuelvethis.isUniversal
.A continuación, es necesario agregar un envoltorio
vuelidate()
alrededor de la etiquetatemplate
, de la siguiente manera:Aquí, se ha agregado una directiva
v-model
al checkboxisUniversal
, y se ha utilizado para controlar si se aplica o no el envoltoriovuelidate()
. El envoltorio se incluye dos veces, una vez sin ninguna condición y otra dentro de un bloqueelse
. Esto significa que siisUniversal
es verdadero, se aplicará el segundo envoltorio (que incluye la directivavuelidate()
), y si es falso, solo se utilizará el primer envoltorio.Con estas modificaciones, las reglas de validación solo se aplicarán si
isUniversal
tiene un valor verdadero, satisfaciendo el requisito de hacer que el campo sea opcional en Vuelidate.