Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5Mobile wallpaper 6
1270 字
6 分钟
Element Plus 表单创建与 v-model 用法指南

Element Plus 表单创建与 v-model 用法指南#

一、Element Plus 表单基础结构#

1. 基本表单框架#

<template>
<el-form :model="formData" label-width="100px" size="large">
<!-- 表单项 -->
</el-form>
</template>
<script setup>
import { reactive } from 'vue'
// 表单数据模型
const formData = reactive({
// 表单字段
})
</script>

2. 核心属性#

  • :model:绑定表单数据对象
  • label-width:标签宽度
  • size:表单尺寸(large/medium/small)
  • rules:表单验证规则

二、常用表单项组件#

1. 输入框(Input)#

<el-form-item label="用户名:" required>
<el-input v-model="formData.username" placeholder="请输入用户名"></el-input>
</el-form-item>

2. 下拉选择器(Select)#

<el-form-item label="性别:" required>
<el-select v-model="formData.gender" placeholder="请选择">
<el-option label="男" value="male"></el-option>
<el-option label="女" value="female"></el-option>
</el-select>
</el-form-item>

多选模式#

<el-form-item label="爱好:">
<el-select v-model="formData.hobbies" placeholder="请选择" multiple>
<el-option label="阅读" value="reading"></el-option>
<el-option label="运动" value="sports"></el-option>
<el-option label="音乐" value="music"></el-option>
</el-select>
</el-form-item>

3. 单选框(Radio)#

<el-form-item label="状态:">
<el-radio-group v-model="formData.status">
<el-radio label="active">启用</el-radio>
<el-radio label="inactive">停用</el-radio>
</el-radio-group>
</el-form-item>

4. 复选框(Checkbox)#

<el-form-item label="角色:">
<el-checkbox-group v-model="formData.roles">
<el-checkbox label="admin">管理员</el-checkbox>
<el-checkbox label="user">普通用户</el-checkbox>
</el-checkbox-group>
</el-form-item>

5. 日期时间选择器#

<!-- 日期选择 -->
<el-form-item label="出生日期:">
<el-date-picker v-model="formData.birthday" type="date" placeholder="选择日期"></el-date-picker>
</el-form-item>
<!-- 时间范围 -->
<el-form-item label="开放时间:">
<el-time-picker v-model="formData.startTime" format="HH:mm" placeholder="开始时间"></el-time-picker>
<span>~</span>
<el-time-picker v-model="formData.endTime" format="HH:mm" placeholder="结束时间"></el-time-picker>
</el-form-item>

6. 文本域(Textarea)#

<el-form-item label="简介:">
<el-input
v-model="formData.intro"
type="textarea"
placeholder="请输入简介"
rows="3"
></el-input>
</el-form-item>

7. 图片上传#

<el-form-item label="头像:">
<el-upload
class="avatar-uploader"
:show-file-list="false"
action="#"
:before-upload="() => false"
>
<img v-if="formData.avatar" :src="formData.avatar" class="avatar" />
<div v-else class="el-upload__text">+ 上传</div>
</el-upload>
</el-form-item>

三、v-model 用法详解#

1. 基本概念#

v-model 是 Vue 的双向绑定指令,用于在表单控件和数据模型之间建立双向数据流。

2. 语法格式#

<el-input v-model="formData.fieldName" placeholder="请输入"></el-input>

3. 工作原理#

  • 当用户在表单控件中输入内容时,v-model 会自动更新绑定的数据模型
  • 当数据模型发生变化时,v-model 会自动更新表单控件的显示

4. 支持的数据类型#

表单控件类型支持的数据类型示例
Input/TextareaString/Numberv-model="formData.name"
Select(单选)String/Number/Booleanv-model="formData.gender"
Select(多选)Arrayv-model="formData.hobbies"
RadioString/Number/Booleanv-model="formData.status"
Checkbox(单选)Booleanv-model="formData.agree"
Checkbox(多选)Arrayv-model="formData.roles"
Date/Time PickerDate/Stringv-model="formData.birthday"

5. 修饰符#

.number#

将输入值转换为数字类型

<el-input v-model.number="formData.age" placeholder="请输入年龄"></el-input>

.trim#

自动去除输入值的首尾空格

<el-input v-model.trim="formData.username" placeholder="请输入用户名"></el-input>

.lazy#

在 change 事件触发时更新数据(默认是 input 事件)

<el-input v-model.lazy="formData.content" placeholder="请输入内容"></el-input>

四、表单布局#

1. 行内布局#

<el-row :gutter="16">
<el-col :sm="12" :xs="24">
<!-- 表单项 -->
</el-col>
<el-col :sm="12" :xs="24">
<!-- 表单项 -->
</el-col>
</el-row>

2. 表单分组#

<h3 style="margin: 20px 0 15px;">基本信息</h3>
<!-- 相关表单项 -->
<h3 style="margin: 20px 0 15px;">高级设置</h3>
<!-- 相关表单项 -->

五、表单验证#

1. 定义验证规则#

<el-form :model="formData" :rules="formRules" label-width="100px">
<!-- 表单项 -->
</el-form>
<script setup>
import { reactive } from 'vue'
const formData = reactive({ /* 表单数据 */ })
// 验证规则
const formRules = reactive({
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }
]
})
</script>

2. 手动触发表单验证#

<el-form ref="formRef" :model="formData" :rules="formRules">
<!-- 表单项 -->
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form>
<script setup>
import { reactive, ref } from 'vue'
const formRef = ref(null)
const formData = reactive({ /* 表单数据 */ })
const formRules = reactive({ /* 验证规则 */ })
// 提交表单
const submitForm = () => {
formRef.value.validate((valid) => {
if (valid) {
// 验证通过,处理表单提交
}
})
}
</script>

六、最佳实践#

1. 表单数据模型设计#

// 推荐使用 reactive 创建表单数据
const formData = reactive({
basic: {
// 基本信息字段
},
advanced: {
// 高级设置字段
}
})

2. 代码组织#

<template>
<!-- 表单结构 -->
</template>
<script setup>
// 1. 导入依赖
// 2. 定义表单数据
// 3. 定义验证规则
// 4. 定义表单方法
// 5. 定义生命周期钩子
</script>
<style scoped>
/* 表单样式 */
</style>

3. 性能优化#

  • 避免不必要的 v-model 绑定
  • 合理使用 lazy 修饰符
  • 对于大数据量的表单,考虑使用虚拟列表

七、常见问题与解决方案#

1. 多选框无法显示所有选择项#

问题:使用 collapse-tags 属性导致选中项被折叠 解决方案:移除 collapse-tags 属性

<!-- 错误 -->
<el-select v-model="formData.tags" multiple collapse-tags>
<!-- 选项 -->
</el-select>
<!-- 正确 -->
<el-select v-model="formData.tags" multiple>
<!-- 选项 -->
</el-select>

2. 表单提交后数据不更新#

问题:表单数据对象没有使用 reactive 或 ref 包装 解决方案:确保使用 Vue 的响应式 API 包装表单数据

// 正确做法
const formData = reactive({
// 表单字段
})

3. 下拉选择器默认值不显示#

问题:v-model 绑定的值与选项的 value 类型不匹配 解决方案:确保绑定值与选项 value 类型一致

// 选项 value 是字符串类型
<el-option label="选项1" value="1"></el-option>
// 绑定值也应该是字符串类型
const formData = reactive({
option: '1' // 而不是数字 1
})

八、总结#

Element Plus 表单创建与 v-model 使用的核心要点:

  1. 表单结构:使用 el-form 作为容器,:model 绑定数据
  2. 表单项:根据需求选择合适的表单组件
  3. v-model:实现表单控件与数据的双向绑定
  4. 布局:使用 el-rowel-col 实现灵活的表单布局
  5. 验证:通过 rules 属性定义表单验证规则
  6. 最佳实践:合理组织代码,优化性能

参考资料

Element Plus 表单创建与 v-model 用法指南
https://yukilain.com/posts/element-plus-form-vmodel-guide/
作者
Yukilain
发布于
2025-11-27
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00