vue快速实现表单
使用 Vue.js 快速实现表单
Vue.js 提供了多种方式快速实现表单,以下是几种常见的方法:
使用 v-model 双向绑定
Vue 的 v-model 指令可以轻松实现表单数据的双向绑定,适用于各种表单元素:

<template>
<form @submit.prevent="handleSubmit">
<input v-model="formData.name" placeholder="姓名">
<input v-model="formData.email" placeholder="邮箱">
<button type="submit">提交</button>
</form>
</template>
<script>
export default {
data() {
return {
formData: {
name: '',
email: ''
}
}
},
methods: {
handleSubmit() {
console.log(this.formData)
}
}
}
</script>
使用 Vue Formulate 库
Vue Formulate 是一个专门用于表单处理的 Vue 库,可以快速构建复杂的表单:
<template>
<FormulateForm v-model="formValues" @submit="handleSubmit">
<FormulateInput name="name" label="姓名" validation="required"/>
<FormulateInput name="email" label="邮箱" type="email" validation="required|email"/>
<FormulateInput type="submit" label="提交"/>
</FormulateForm>
</template>
<script>
import { FormulateForm, FormulateInput } from 'vue-formulate'
export default {
components: { FormulateForm, FormulateInput },
data() {
return {
formValues: {}
}
},
methods: {
handleSubmit(data) {
console.log(data)
}
}
}
</script>
动态表单生成
对于需要根据数据动态生成表单的场景,可以使用 v-for 动态渲染表单:

<template>
<form @submit.prevent="handleSubmit">
<div v-for="field in formFields" :key="field.name">
<label>{{ field.label }}</label>
<input
v-model="formData[field.name]"
:type="field.type"
:placeholder="field.placeholder">
</div>
<button type="submit">提交</button>
</form>
</template>
<script>
export default {
data() {
return {
formFields: [
{ name: 'username', label: '用户名', type: 'text', placeholder: '输入用户名' },
{ name: 'password', label: '密码', type: 'password', placeholder: '输入密码' }
],
formData: {}
}
},
methods: {
handleSubmit() {
console.log(this.formData)
}
}
}
</script>
表单验证
Vue 结合 VeeValidate 可以实现强大的表单验证功能:
<template>
<form @submit.prevent="handleSubmit">
<input v-model="name" name="name" placeholder="姓名">
<span v-if="errors.name">{{ errors.name }}</span>
<input v-model="email" name="email" placeholder="邮箱">
<span v-if="errors.email">{{ errors.email }}</span>
<button type="submit">提交</button>
</form>
</template>
<script>
import { useField, useForm } from 'vee-validate'
import * as yup from 'yup'
export default {
setup() {
const schema = yup.object({
name: yup.string().required('姓名不能为空'),
email: yup.string().email('邮箱格式不正确').required('邮箱不能为空')
})
const { handleSubmit, errors } = useForm({
validationSchema: schema
})
const { value: name } = useField('name')
const { value: email } = useField('email')
const handleSubmit = handleSubmit(values => {
console.log(values)
})
return { name, email, errors, handleSubmit }
}
}
</script>
表单组件化
将表单字段封装为可复用的组件:
<template>
<form @submit.prevent="handleSubmit">
<FormField v-model="formData.name" label="姓名" type="text"/>
<FormField v-model="formData.email" label="邮箱" type="email"/>
<button type="submit">提交</button>
</form>
</template>
<script>
import FormField from './FormField.vue'
export default {
components: { FormField },
data() {
return {
formData: {
name: '',
email: ''
}
}
},
methods: {
handleSubmit() {
console.log(this.formData)
}
}
}
</script>
这些方法可以根据项目需求灵活选择,从简单的双向绑定到复杂的表单验证和动态生成,Vue 都提供了相应的解决方案。






