目录
1. Basic Form Handling with v-model
2. Simple Inline Validation (No Library)
3. Using a Validation Library (Recommended for Larger Apps)
Install dependencies:
Example with VeeValidate Yup:
4. Tips for Better Form UX
首页 web前端 Vue.js 如何处理VUE中的表格和验证?

如何处理VUE中的表格和验证?

Jul 31, 2025 am 06:31 AM

使用v-model绑定表单数据以实现双向响应;2. 通过computed属性手动实现基础验证并显示错误信息;3. 对于复杂表单推荐使用VeeValidate结合Yup定义验证规则,提升可维护性;4. 优化用户体验应包括提交或失焦时校验、禁用重复提交、重置表单及显示加载状态,最终确保表单数据完整性和用户交互流畅性。

How to handle forms and validation in Vue?

Handling forms and validation in Vue.js is a common task, and doing it well improves user experience and data integrity. Here’s how to manage it effectively using Vue 3 (Composition API), with or without external libraries.

How to handle forms and validation in Vue?

1. Basic Form Handling with v-model

Use v-model to bind form inputs to reactive data. This keeps your form state in sync with your component’s data.

<script setup>
import { ref } from 'vue'

const form = ref({
  name: '',
  email: '',
  password: ''
})

const handleSubmit = () => {
  console.log('Form submitted:', form.value)
  // Add submission logic (e.g., API call)
}
</script>

<template>
  <form @submit.prevent="handleSubmit">
    <input v-model="form.name" type="text" placeholder="Name" required />
    <input v-model="form.email" type="email" placeholder="Email" required />
    <input v-model="form.password" type="password" placeholder="Password" required />
    <button type="submit">Submit</button>
  </form>
</template>
  • @submit.prevent stops the page from reloading.
  • v-model provides two-way binding.

2. Simple Inline Validation (No Library)

You can implement basic validation manually using computed properties or functions.

How to handle forms and validation in Vue?
<script setup>
import { ref, computed } from 'vue'

const form = ref({
  name: '',
  email: '',
  password: ''
})

const errors = computed(() => {
  const errs = {}
  if (!form.value.name) errs.name = 'Name is required'
  if (!form.value.email) {
    errs.email = 'Email is required'
  } else if (!/^\S @\S \.\S $/.test(form.value.email)) {
    errs.email = 'Email is invalid'
  }
  if (!form.value.password || form.value.password.length < 6) {
    errs.password = 'Password must be at least 6 characters'
  }
  return errs
})

const isValid = computed(() => Object.keys(errors.value).length === 0)

const handleSubmit = () => {
  if (isValid.value) {
    console.log('Form is valid:', form.value)
    // Submit logic
  } else {
    console.log('Form has errors:', errors.value)
  }
}
</script>

<template>
  <form @submit.prevent="handleSubmit">
    <input v-model="form.name" type="text" placeholder="Name" />
    <div v-if="errors.name" class="error">{{ errors.name }}</div>

    <input v-model="form.email" type="email" placeholder="Email" />
    <div v-if="errors.email" class="error">{{ errors.email }}</div>

    <input v-model="form.password" type="password" placeholder="Password" />
    <div v-if="errors.password" class="error">{{ errors.password }}</div>

    <button type="submit" :disabled="!isValid">Submit</button>
  </form>
</template>

<style>
.error {
  color: red;
  font-size: 0.8em;
}
</style>

This approach works well for small forms and gives you full control.


For complex forms, use a library like VeeValidate with Yup for schema-based validation.

How to handle forms and validation in Vue?

Install dependencies:

npm install yup @vee-validate/rules @vee-validate/form @vee-validate/yup

Example with VeeValidate Yup:

<script setup>
import { useForm } from 'vee-validate'
import * as yup from 'yup'

// Define schema
const schema = yup.object({
  name: yup.string().required('Name is required'),
  email: yup.string().email('Invalid email').required('Email is required'),
  password: yup.string().min(6, 'Min 6 characters').required('Password is required')
})

// Use form
const { defineField, handleSubmit, errors } = useForm({
  validationSchema: schema
})

const [name, nameAttrs] = defineField('name')
const [email, emailAttrs] = defineField('email')
const [password, passwordAttrs] = defineField('password')

const onSubmit = handleSubmit((values) => {
  console.log('Valid form data', values)
})
</script>

<template>
  <form @submit="onSubmit">
    <input v-model="name" v-bind="nameAttrs" type="text" placeholder="Name" />
    <div v-if="errors.name" class="error">{{ errors.name }}</div>

    <input v-model="email" v-bind="emailAttrs" type="email" placeholder="Email" />
    <div v-if="errors.email" class="error">{{ errors.email }}</div>

    <input v-model="password" v-bind="passwordAttrs" type="password" placeholder="Password" />
    <div v-if="errors.password" class="error">{{ errors.password }}</div>

    <button type="submit">Submit</button>
  </form>
</template>

Benefits:

  • Reusable validation schemas
  • Built-in rules (email, min, max, etc.)
  • Async validation support
  • Better error handling and UX

4. Tips for Better Form UX

  • Show errors on blur or submit, not on every keystroke.
  • Disable submit button when form is invalid or submitting.
  • Reset form after successful submission:
    form.value = { name: '', email: '', password: '' }
  • Use loading states during async submits.
  • Provide clear error messages.

  • Basically, start simple with v-model and manual checks for small forms. As complexity grows, switch to VeeValidate Yup for maintainable, scalable validation. It’s not hard to set up and saves a lot of time down the road.

    以上是如何处理VUE中的表格和验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何管理VUE项目中的环境变量 如何管理VUE项目中的环境变量 Aug 22, 2025 am 11:38 AM

环境变量管理在Vue项目中至关重要,需根据构建工具选择正确方式。1.VueCLI项目使用VUE_APP_前缀的.env文件,通过process.env.VUE_APP_访问,如.env.production;2.Vite项目使用VITE_前缀,通过import.meta.env.VITE_访问,如.env.staging;3.两者均支持自定义模式加载对应文件,且应将.env.local类文件加入.gitignore;4.始终避免在前端暴露敏感信息,提供.env.example供参考,并在运行时校

如何将GraphQl与Vue和Apollo客户端一起使用 如何将GraphQl与Vue和Apollo客户端一起使用 Aug 16, 2025 am 03:06 AM

安装ApolloClient和相关依赖包并根据Vue2或Vue3配置客户端;2.在Vue3中通过provideApolloClient提供客户端实例,在Vue2中使用VueApollo插件;3.使用useQuery和useMutation组合式API在组件中发起查询和变更;4.通过变量和refetch实现动态数据获取与刷新,可选轮询更新;5.利用loading和error状态优化用户体验,结合Suspense或防抖提升交互流畅性;6.通过HTTP链接头添加认证信息,使用缓存、片段和查询文件组织提

如何在VUE 3中使用Teleport 如何在VUE 3中使用Teleport Aug 20, 2025 am 10:30 AM

teleportinvue3allowsrenderingAcomponent'stemplateInAdifferentDomLocationWhilePreservingItSlogicalPositionIntheComponentTree; 1.ItusestHecomponentWithatoTaToTributesPecifitutesPecifieingThetArgetDomnodeDormengetDomnode,supsas as asas as as s suesAs“ body” body'或“#modal-root”或“#modal-root”; 2.theteleport; theteleported;

VUE中的手表和计算属性有什么区别? VUE中的手表和计算属性有什么区别? Aug 22, 2025 am 06:03 AM

Usecomputed Properties WhenderiveReactiveValuesFordisPlay,AstheyAreCachedDandonlyre-evaluate-WhendependependencenciesChange; 2.UseWatchForexeCutingsIdeEffectSlikeCectSlikeCicallSorupDatingStorgeStorageInresetodatoreSeteToDatachanges

如何在VUE中创建功能组件 如何在VUE中创建功能组件 Aug 22, 2025 am 05:11 AM

功能组件在Vue2中用于创建无状态、高性能的展示型组件,适用于仅依赖props的场景。1.定义功能组件需设置functional:true,并通过render函数接收props和context返回VNode。2.使用时像普通组件一样注册并传入props和事件。3.处理插槽需从context中获取slots()和children。功能组件不适用于需要响应式数据、生命周期钩子或v-model的场景。Vue3中已移除functional选项,改用函数式写法或简洁的组合式组件替代,性能优化更依赖Comp

如何使用VUE本机创建移动应用 如何使用VUE本机创建移动应用 Aug 25, 2025 pm 02:25 PM

使用VueNative创建移动应用是利用Vue.js语法结合ReactNative实现跨平台开发的有效方式;2.首先配置开发环境,安装Node.js、ExpoCLI,并通过命令npxcreate-react-native-appmy-vue-app--templatevue-native创建项目;3.进入项目目录并运行npmstart,通过ExpoGo应用扫描二维码在移动设备上预览;4.编写.vue文件组件,使用、和结构,注意采用小写的ReactNative组件如view、text和button

如何使用Vue 3的构图API使用打字稿 如何使用Vue 3的构图API使用打字稿 Aug 08, 2025 am 10:27 AM

使用Vite创建支持TypeScript的Vue3项目;2.用defineComponent提供类型推断;3.使用简化代码;4.用接口或类型定义props;5.用类型联合正确声明emits;6.在可组合函数中使用泛型;7.使用InjectionKey类型化provide/inject——通过这些步骤可实现类型安全、可维护的Vue3 TypeScript应用,最终构建出强大且可扩展的前端项目。

如何在VUE中使用故事书进行组件开发 如何在VUE中使用故事书进行组件开发 Aug 15, 2025 am 12:35 AM

安装Storybook可通过npxstorybook@latestinit自动完成,或手动安装依赖并配置.storybook/main.js和preview.js;2.编写故事文件(如Button.stories.js)定义组件不同状态,使用Template绑定参数生成多个实例;3.利用Args和Controls实现属性动态调整,提升交互测试效率;4.通过MDX文件整合文档与故事,增强可读性和协作性;5.建议将故事文件与组件共置、采用CSF格式、集成Chromatic进行视觉回归测试,并使用装饰

See all articles