entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Mostrar errores formularios con vuelidate en Laravel

Estoy intentando mostrar errores con Vuelidate en un formulario con Laravel y Vue. El problema que estoy teniendo es que no me está apareciendo el span en la vista, pero si me meto en la consola si que aparece el código o desaparece según la validación.

Por una parte tengo en el componente:

<template>
    <form method="POST" @submit.prevent="registrarUsuarios" id="validated-form">
        <input type="hidden" name="_token" :value="csrf">

        <div class="form-row">
            <div class="form-group col-md-6">
                <label for="nombre">{{ 'register.name' | trans }}</label>
                <input id="nombre" v-model="usuario.nombre" type="text" class="form-control" :class="{ 'error': $v.usuario.nombre.$invalid, 'valid': !$v.usuario.nombre.$invalid }" name="name" required autocomplete="nombre" autofocus>

                <span v-if="!$v.usuario.nombre.required" class="invalid-feedback" role="alert">
                    <strong>El nombre es obligatorio {{ !$v.usuario.nombre.required }}</strong>
                </span>
            </div>
        </div>
   </form>
</template>

Este es el script que tengo en el componente:

<script>
    import { required, minLength, between } from 'vuelidate/lib/validators';

    export default {
        data() {
            return {
                csrf: document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
                usuarios: [],
                usuario: {
                    nombre: '',
                    apellidos: '',
                    email: '',
                    login: '',
                    imagen: '',
                    password: '',
                    password_confirmation: '',
                    perfil_id: '',
                    idioma_iso: '',
                    economato: false,
                    activo: false
                },
                errors: {}
            }
        },
        props: ['perfiles', 'idiomas'],
        validations: {
            usuario: {
                nombre: {
                    required,
                    minLength: minLength(2)
                }
            }
        },
        methods: {
            registrarUsuarios: function () {
                this.errors = [];
                const params = {
                    nombre: this.usuario.nombre,
                    apellidos: this.usuario.apellidos,
                    email: this.usuario.email,
                    login: this.usuario.login,
                    imagen: this.usuario.imagen,
                    password: this.usuario.password,
                    password_confirmation: this.usuario.password_confirmation,
                    perfil_id: this.usuario.perfil_id,
                    idioma_iso: this.usuario.idioma_iso,
                    economato: this.usuario.economato,
                    activo: this.usuario.activo
                };
                axios.post('/users/create', params)
                    .then(response => {

                        } else {

                        }
                    }).catch(error => {

                    })
            }
        },
        mounted() {
            console.log('Component mounted.');
        }
    }
</script>

Funciona todo correctamente, es decir, si el input está vacío el border se pone en rojo, si tiene menos de dos caracteres aparece en rojo y si está todo correcto se pone en verde.
No entiendo por qué motivo no aparecen los mensajes que tengo declarados en el span cuando realmente sí están apareciendo en el DOM.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta