Как использовать vee-validate 4.7.x с Vuetify 3.1.x для проверки?

(Обратите внимание: у этого вопроса уже были более старые сообщения, однако они касаются более старых версий vuetify)

Я изо всех сил пытался запустить простую проверку формы с помощью vee-validate (4.7.4), vue (3.2.4) и vuetify (3.1.3).

Например, поле ввода электронной почты не показывает ошибку, если вы вводите недействительный адрес электронной почты.

Вот соответствующий код (ссылка на stackblitz приведена ниже):

<script setup>
import { markRaw, onMounted, toRefs, ref } from 'vue';
import { useField, useForm } from 'vee-validate';
import * as yup from 'yup';
import TextFieldWithValidation from './components/TextFieldWithValidation.vue';

const email = useField('email');
const password = useField('password');

/*const schema = markRaw(yup.object({
  email: yup.string().email().required(),
  password: yup.string().min(8).required(),
})); //*/

const { handleSubmit, resetForm } = useForm({
  validationSchema: /* schema */ {
    email(value) {
      if (/^[a-z.-]+@[a-z.-]+\.[a-z]+$/i.test(value)) return true;
      return 'Must be a valid e-mail.';
    },
    password(value) {
      if (value?.length >= 8) return true;
      return 'Password needs to be at least 8 characters.';
    },
  }
});

function onInvalidSubmit({ values, errors, results }) {
  console.info('onInvalidSubmit():');
  console.info(values);
  console.info('Errors: ', errors);
  console.info('Detailed results: ', results);
}

const onSubmit = handleSubmit((values) => {
  console.info('onSubmit() - values:', values);
}, onInvalidSubmit); //*/
</script>

<template>
  <div style = "padding: 10px">
    <h4>Form with vee-validate (and preferrably yup):</h4>
    <form @submit.prevent = "onSubmit">
      <v-text-field
        label = "E-mail"
        v-model = "email.value.value"
        :error-messages = "email.errorMessage.value"
      ></v-text-field>

      <v-text-field
        label = "Password"
        type = "password"
        v-model = "password.value.value"
        :error-messages = "password.errorMessage.value"
      ></v-text-field>
    </form>

    <v-btn color = "primary" class = "mr-4" type = "submit"> Submit </v-btn>

    <div>Email: {{ email.value.value }}</div>
    <div>Password: {{ password.value.value }}</div>
  </div>
</template>

Я следовал этому примеру в документации vuetify:

https://next.vuetifyjs.com/en/components/forms/#vee-validate

Кроме того, вот проект stackblitz, чтобы вы могли поиграть и, возможно, найти настоящую ошибку:

https://stackblitz.com/edit/vee-validate-v4-vuetify-g1sg9z?file=src%2FApp.vue

Был бы признателен, если бы кто-то мог пролить свет на этот вопрос.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это :

<script>
import { ref } from 'vue';
import { useField, useForm } from 'vee-validate';
import * as yup from 'yup';

export default {
  setup() {
    const validationSchema = yup.object().shape({
      email: yup.string().email().required(),
      password: yup.string().min(8).required(),
    });

    const { handleSubmit, handleReset } = useForm({
      validationSchema,
    });

    const email = useField('email', validationSchema);
    const password = useField('password', validationSchema);

    const onSubmit = handleSubmit(async (values) => {
      alert(JSON.stringify(values, null, 2));
    });

    return { email, password, onSubmit, handleReset };
  },
};
</script>
<template>
  <form @submit.prevent = "onSubmit">
    <v-text-field
      label = "E-mail"
      v-model = "email.value.value"
      :error-messages = "email.errorMessage.value"
    ></v-text-field>

    <v-text-field
      label = "Password"
      type = "password"
      v-model = "password.value.value"
      :error-messages = "password.errorMessage.value"
    ></v-text-field>
    <v-btn color = "primary" type = "submit">Submit</v-btn>
  </form>
</template>

Спасибо друг! Я сбит с толку тем, что useForm({ validationSchema }) должен предшествовать useField('email', validationSchema) Если наоборот, проверка не запускается.

ShadowGames 08.02.2023 11:57

Другие вопросы по теме