基础表单

<template><el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="100px"><el-form-item label="用户名" prop="username"><el-input v-model="form.username" placeholder="请输入用户名" /></el-form-item><el-form-item label="邮箱" prop="email"><el-input v-model="form.email" placeholder="请输入邮箱" /></el-form-item><el-form-item label="爱好"><!-- 注意: 爱好没有 prop, 所以不会参与 el-form 的校验 --><el-checkbox-group v-model="form.hobby"><el-checkbox label="读书" /><el-checkbox label="音乐" /><el-checkbox label="电影" /></el-checkbox-group></el-form-item><el-form-item><el-button type="primary" @click="submitForm(ruleFormRef)">提交</el-button><el-button @click="resetForm(ruleFormRef)">重置</el-button></el-form-item></el-form>
</template><script setup>
import { ref, reactive } from 'vue'
import { ElMessage } from 'element-plus'const ruleFormRef = ref() // 用于获取 el-form 实例// 表单数据
const form = reactive({username: '',email: '',hobby: [] // 数组
})// 校验规则
const rules = reactive({username: [{ required: true, message: '请输入用户名', trigger: 'blur' },{ min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur' }],email: [{ required: true, message: '请输入邮箱地址', trigger: 'blur' },{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }]
})// 提交表单
const submitForm = async (formEl) => {if (!formEl) return;try {// validate 返回 Promiseawait formEl.validate()ElMessage.success('提交成功!')console.log('表单数据:', form)} catch (error) {ElMessage.error('校验失败!')console.log('校验失败:', error)}
}// 重置表单
const resetForm = (formEl) => {if (!formEl) return;formEl.resetFields()
}
</script>

 行内表单 (Inline Form)

<template><el-form :inline="true" :model="searchForm" class="demo-form-inline"><el-form-item label="用户名"><el-input v-model="searchForm.username" placeholder="用户名" /></el-form-item><el-form-item label="状态"><el-select v-model="searchForm.status" placeholder="选择状态"><el-option label="全部" value="" /><el-option label="启用" value="1" /><el-option label="禁用" value="0" /></el-select></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item></el-form>
</template><script setup>
import { reactive } from 'vue'const searchForm = reactive({username: '',status: ''
})const onSubmit = () => {console.log('查询条件:', searchForm)
}
</script>

 标签在上方的表单

<template><el-form :model="form" :rules="rules" label-position="top" label-width="100px"><el-form-item label="项目名称" prop="projectName"><el-input v-model="form.projectName" /></el-form-item><el-form-item label="项目描述" prop="description"><el-input v-model="form.description" type="textarea" /></el-form-item><el-form-item><el-button type="primary">保存</el-button></el-form-item></el-form>
</template>

动态增减表单项

<template><el-form :model="dynamicForm" ref="dynamicFormRef"><el-form-itemv-for="(domain, index) in dynamicForm.domains":key="domain.key":label="index === 0 ? '域名' : ''" <!-- 只为第一个显示标签 -->:prop="'domains.' + index + '.value'":rules="{required: true, message: '域名不能为空', trigger: 'blur'}"><el-input v-model="domain.value" style="width: 300px; margin-right: 10px;" /><el-button @click.prevent="removeDomain(domain)">删除</el-button></el-form-item><el-form-item><el-button @click="addDomain">新增域名</el-button><el-button type="primary" @click="submitDynamicForm(dynamicFormRef)">提交</el-button></el-form-item></el-form>
</template><script setup>
import { ref, reactive } from 'vue'const dynamicFormRef = ref()
const dynamicForm = reactive({domains: [{ value: '', key: Date.now() } // key 用于 v-for 的唯一性]
})const addDomain = () => {dynamicForm.domains.push({value: '',key: Date.now() + Math.random()})
}const removeDomain = (item) => {const index = dynamicForm.domains.indexOf(item)if (index !== -1) {dynamicForm.domains.splice(index, 1)}
}const submitDynamicForm = async (formEl) => {if (!formEl) return;try {await formEl.validate()ElMessage.success('提交成功!')console.log('动态表单数据:', dynamicForm.domains)} catch (error) {ElMessage.error('校验失败!')}
}
</script>

使用建议与最佳实践

  1. ref 是关键: 务必给 el-form 添加 ref,以便调用 validateresetFields 等方法。
  2. prop 必须匹配 modelel-form-item 的 prop 值必须是 model 对象中存在的属性名,且路径要正确(如嵌套对象用 user.name)。
  3. 合理使用 triggerblur 适合必填和格式校验,避免用户输入时频繁报错。change 适合实时性要求高的校验(如密码强度)。
  4. resetFields 的陷阱: 它重置的是组件初始化时的 model 值。如果需要重置到一个特定的值(比如空对象 {}),可以在调用 resetFields() 后手动设置 model,或者使用 clearValidate() 和手动清空数据。
  5. 异步校验: 使用 asyncValidator 处理需要请求后端验证的场景(如用户名唯一性检查)。注意防抖。
  6. status-icon: 开启后,用户能更直观地看到输入状态。
  7. scroll-to-error: 对于长表单,开启此功能能提升用户体验。
  8. inline-message: 在空间紧凑的布局中,使用行内错误信息可以节省垂直空间。
  9. 自定义错误信息: 使用 el-form-item 的 error 属性或 slots 可以完全控制错误信息的显示。
  10. 组合使用el-form 可以与 el-row/el-col 结合,实现更复杂的响应式表单布局。

掌握 el-form 的数据绑定、校验机制和布局控制,是高效开发 Vue + Element Plus 应用的基础。它极大地简化了表单处理的复杂性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94955.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94955.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94955.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch实战(3)——PyTorch vs. TensorFlow详解

PyTorch实战&#xff08;3&#xff09;——PyTorch vs. TensorFlow详解0. 前言1. 张量2. PyTorch 模块2.1 torch.nn2.2 torch.optim2.3 torch.utils.data3. 使用 PyTorch 训练神经网络小结系列链接0. 前言 PyTorch 是一个基于 Torch 库的 Python 机器学习库&#xff0c;广泛用…

在win服务器部署vue+springboot + Maven前端后端流程详解,含ip端口讲解

代码打包与基本配置 首先配置一台win系统服务器&#xff0c;开放你前端和后端运行的端口&#xff0c;如80和8080 前端打包 前端使用vue3&#xff0c;在打包前修改项目配置文件&#xff0c;我使用的是vite所以是vite.config.js。 import { defineConfig } from vite import …

Springcloud-----Nacos

一、Nacos的安装 Nacos是阿里推出的一种注册中心组件&#xff0c;并且已经开源&#xff0c;目前是国内最为流行的注册中心组件。下面我们来了解一下如何安装并启动Nacos。 Nacos是一个独立的项目&#xff0c;我们可以去GitHub上下载其压缩包来使用&#xff0c;地址如下&#x…

腾讯云重保流程详解:从预案到复盘的全周期安全防护

摘要 腾讯云针对国家级重大活动&#xff08;如进博会、冬奥会等&#xff09;提供的网络安全保障服务&#xff08;重保&#xff09;是一套系统化的主动防御体系。本文从“事前准备”“事中响应”“事后复盘”三个核心阶段出发&#xff0c;结合民生银行等典型用户的实战案例&…

单表查询-group by rollup优化

1、group by rollup基本用法 我们有时候在项目上看到group by rollup用法&#xff0c;其实就是对group by分组进行合计。 下面看一下例子 select count(1),c3 from t1 group by rollup(c3); 计划从计划中解读亦是如此&#xff0c;另外可以从结果上进行分析第21行的count其实就是…

云网络(参考自腾讯云计算工程师认证)

计算机网络&#xff1a;OSI七层模型&#xff1a; 应用层&#xff1a;负责处理网络应用程序之间的通信、 表示层&#xff1a;负责数据的格式化和加密、 会话层&#xff1a;负责建立、管理和终止会话、 传输层&#xff1a;负责端到端的可靠传输、 网络层&#xff1a;负责数据的路…

【MLLM】多模态理解Ovis2.5模型和训练流程(更新中)

note 模型架构&#xff1a;延续 Ovis 系列创新的结构化嵌入对齐设计。 Ovis2.5 由三大组件构成&#xff1a;动态分辨率 ViT 高效提取视觉特征&#xff0c;Ovis 视觉词表模块实现视觉与文本嵌入的结构对齐&#xff0c;最后由强大的 Qwen3 作为语言基座&#xff0c;处理多模态嵌…

mysql中的通用语法及分类

MySQL 是一种广泛使用的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;其语法设计遵循 SQL 标准&#xff0c;但也有一些特有的扩展。以下从​​通用语法规范​​和​​SQL 语句分类​​两个维度系统梳理 MySQL 的核心语法体系。一、MySQL 通用语法规范通用语法…

Linux-搭建NFS服务器

Linux-搭建NFS服务器前言一、网络配置二、在nfs服务器上安装nfs-utils软件包三、设置共享目录四、挂载NFS共享目录前言 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09; 是一种分布式文件系统协议&#xff0c;最初由 Sun Microsystems 于 1984 年开发…

eslasticsearch+ik分词器+kibana

eslasticsearch 下载地址:https://www.elastic.co/cn/downloads/past-releases ik分词器 下载地址&#xff1a;https://release.infinilabs.com/analysis-ik/stable/ kibana 下载地址&#xff1a;https://www.elastic.co/cn/downloads/kibana 1、解压安装包 将下载的 zi…

SOME/IP-SD IPv4组播的通信参数由谁指定?

<摘要> 在AUTOSAR SOME/IP-SD协议中&#xff0c;组播通信参数&#xff08;地址、协议、端口&#xff09;的协商机制。其核心在于明确规定了组播流的发布者和接收者之间由谁来“指定”通信路径&#xff0c;从而确保双方能够成功会合&#xff0c;实现高效的一对多事件分发。…

新手首次操作SEO核心要点

内容概要 初次接触SEO的新手朋友们&#xff0c;面对浩瀚的网络优化知识&#xff0c;难免感到无从下手。这份2025年的零基础入门指南&#xff0c;正是为你们量身打造。它清晰地规划了学习路径&#xff0c;从最基础的网站搭建注意事项开始&#xff0c;帮助你避开常见陷阱&#xf…

AI、人工智能基础: 模型剪枝的概念与实践(PyTorch版)

胡说八道: 各位观众老爷&#xff0c;大家好&#xff0c;我是诗人啊_&#xff0c;今天和各位分享模型剪枝的相关知识和操作&#xff0c;一文速通&#xff5e; &#xff08;屏幕前的你&#xff0c;帅气低调有内涵&#xff0c;美丽大方很优雅… 所以&#xff0c;求个点赞、收藏、关…

Kubernetes 服务发现与健康检查详解

Kubernetes 提供了多种机制来管理服务发现、负载均衡和容器健康状态监控。本文将围绕以下几个方面展开&#xff1a;Service 类型&#xff1a;ClusterIP、NodePort、Headless Service、LoadBalancer&#xff08;MetallB&#xff09;Ingress 的实现原理健康检查探针&#xff1a;L…

如何规划一年、三年、五年的IP发展路线图?

‍在知识付费领域&#xff0c;规划 IP 发展路线&#xff0c;需要从短期、中期、长期不同阶段&#xff0c;系统地布局内容、运营与商业变现&#xff0c;逐步提升 IP 影响力与商业价值。一年目标&#xff1a;立足定位&#xff0c;夯实基础精准定位&#xff0c;打磨内容利用创客匠…

C++从入门到实战(二十)详细讲解C++List的使用及模拟实现

C从入门到实战&#xff08;二十&#xff09;C List的使用及模拟实现前言一、什么是List1.1 List的核心特性1.2 List与vector的核心差异1.3 List的构造、拷贝构造与析构1.3.1 常用构造函数1.3.2 析构函数1.4 List的迭代器1.4.1 迭代器类型与用法示例1&#xff1a;正向迭代器遍历…

人工智能学习:机器学习相关面试题(一)

1、 机器学习中特征的理解 def: 特征选择和降维 特征选择&#xff1a;原有特征选择出子集 &#xff0c;不改变原来的特征空间 降维&#xff1a;将原有的特征重组成为包含信息更多的特征&#xff0c; 改变了原有的特征空间降维的主要方法 Principal Component Analysis (主成…

亚马逊巴西战略升级:物流网络重构背后的生态革新与技术赋能之路

在全球电商版图中&#xff0c;拉美市场正以惊人的增长速度成为新的战略高地&#xff0c;而巴西作为其中的核心市场&#xff0c;凭借庞大的人口基数、高速发展的数字经济以及不断提升的消费能力&#xff0c;吸引着众多电商巨头争相布局。近日&#xff0c;亚马逊宣布将于2025年底…

PS自由变换

自由变换 自由变换用来对图层、选区、路径或像素内容进行灵活的像素调整。可以进行缩放、旋转、扭曲等多种操作。快捷键&#xff1a;CtrlT&#xff0c;操作完成后使用Enter键可以确认变换自由变换过程中如果出现失误&#xff0c;可以按ESC退出&#xff1b;满意可以按enter确定。…

【K8s】整体认识K8s之存储--volume

为什么要用volume&#xff1f;首先。容器崩溃或重启时&#xff0c;所有的数据都会丢失&#xff0c;我们可以把数据保存到容器的外部&#xff0c;比如硬盘nfs&#xff0c;这样&#xff0c;即使容器没了&#xff0c;数据还在&#xff1b;第二就是容器之间是隔离的。我们如果想共享…