news 2026/6/21 10:08:34

Vue3 + Element Plus 完整使用指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue3 + Element Plus 完整使用指南

Vue3 + Element Plus 完整使用指南

一、Element Plus 是什么?

Element Plus 是饿了么团队为 Vue 3 打造的一套桌面端 UI 组件库。它是 Element UI 的 Vue 3 版本,提供了丰富的组件,比如按钮、表单、表格、分页、弹窗等,能让你快速搭建出美观的管理后台。

官方文档:https://element-plus.org/zh-CN/


二、安装

2.1 创建 Vue 3 项目(如已有项目可跳过)

npmcreate vite@latest my-project ----templatevuecdmy-projectnpminstall

2.2 安装 Element Plus

npminstallelement-plus

三、引入方式(两种)

方式一:全量引入(推荐新手使用)

main.js中一次性引入所有组件:

import{createApp}from'vue'importElementPlusfrom'element-plus'import'element-plus/dist/index.css'// ⚠️ 一定要引入样式文件importAppfrom'./App.vue'constapp=createApp(App)app.use(ElementPlus)// 注册所有组件app.mount('#app')

优点:配置简单,开箱即用,直接用<el-button><el-table>等标签即可。
缺点:打包体积较大,因为所有组件都会被打包进去。

方式二:按需引入(适合生产项目)

只引入你实际使用的组件,减小打包体积:

import{createApp}from'vue'import{ElButton,ElTable,ElInput}from'element-plus'import'element-plus/dist/index.css'importAppfrom'./App.vue'constapp=createApp(App)app.use(ElButton)app.use(ElTable)app.use(ElInput)app.mount('#app')

💡 更推荐搭配unplugin-vue-componentsunplugin-auto-import实现自动按需引入,无需手动 import。


四、常用组件实战

下面以一个「人员信息管理系统」为例,演示常用组件的用法。

4.1 按钮(el-button)

<el-buttontype="primary">新增</el-button><el-buttontype="danger">删除</el-button><el-buttontype="success">保存</el-button><el-buttontype="primary"link>编辑</el-button><!-- link 类型:文字按钮 -->

常用type值:

type用途
primary主要操作(蓝)
success成功(绿)
warning警告(橙)
danger危险(红)
info信息(灰)

4.2 表格(el-table)

表格是后台系统最常用的组件,用于展示列表数据:

<el-table:data="list"borderstripe><el-table-columnlabel="ID"prop="id"width="80"></el-table-column><el-table-columnlabel="姓名"prop="name"width="150"></el-table-column><el-table-columnlabel="籍贯"prop="place"></el-table-column><el-table-columnlabel="操作"width="150"><template#default="{ row }"><el-buttontype="primary"link@click="handleEdit(row)">编辑</el-button><el-buttontype="danger"link@click="handleDelete(row.id)">删除</el-button></template></el-table-column></el-table>

关键属性说明:

属性作用
:data绑定数据源(数组)
border显示边框
stripe斑马纹效果
prop对应数据中的字段名
#default作用域插槽,{ row }可以获取当前行数据

4.3 表单(el-form)

表单用于数据输入,配合弹窗使用非常常见:

<el-formlabel-width="50px"><el-form-itemlabel="姓名"><el-inputv-model="formData.name"placeholder="请输入姓名"/></el-form-item><el-form-itemlabel="籍贯"><el-inputv-model="formData.place"placeholder="请输入籍贯"/></el-form-item></el-form>

4.4 弹窗(el-dialog)

弹窗常用于新增/编辑操作:

<el-dialogv-model="dialogVisible"title="编辑"width="400px"><!-- 弹窗内容 --><el-form>...</el-form><!-- 底部按钮插槽 --><template#footer><el-button@click="dialogVisible = false">取消</el-button><el-buttontype="primary"@click="handleSave">确认</el-button></template></el-dialog>

核心要点

  • v-model控制弹窗的显示/隐藏
  • #footer插槽用于自定义底部按钮

4.5 分页(el-pagination)

当数据量大时,需要分页展示:

<el-paginationbackgroundlayout="prev, pager, next":total="list.length":current-page="currentPage":page-size="pageSize"@current-change="handlePageChange"/>

关键属性:

属性作用
:total数据总条数
:current-page当前页码(从 1 开始)
:page-size每页显示条数
@current-change页码改变时触发的事件
background按钮显示背景色
layout布局组件,逗号分隔

常用layout值:

prev 上一页按钮 pager 页码列表 next 下一页按钮 total 显示总条数 sizes 每页条数选择器 jumper 跳转到指定页

五、完整项目示例

下面是一个包含列表展示、删除、编辑、分页的完整示例:

5.1 项目结构

src/ ├── App.vue ← 主页面 ├── main.js ← 入口文件 └── components/ └── Edit.vue ← 编辑弹窗组件

5.2 main.js — 入口文件

import{createApp}from'vue'importElementPlusfrom'element-plus'import'element-plus/dist/index.css'importAppfrom'./App.vue'constapp=createApp(App)app.use(ElementPlus)app.mount('#app')

5.3 App.vue — 主页面

<scriptsetup>import{ref,computed}from'vue'importEditfrom'./components/Edit.vue'// 列表数据constlist=ref([{id:1,name:'张三',place:'北京'},{id:2,name:'李四',place:'上海'},{id:3,name:'王五',place:'广州'},{id:4,name:'赵六',place:'深圳'},{id:5,name:'孙七',place:'杭州'},{id:6,name:'周八',place:'成都'},{id:7,name:'吴九',place:'武汉'},{id:8,name:'郑十',place:'南京'},{id:9,name:'陈十一',place:'西安'},{id:10,name:'林十二',place:'重庆'}])// ========== 分页相关 ==========constcurrentPage=ref(1)constpageSize=ref(5)// 计算当前页显示的数据constpageData=computed(()=>{conststart=(currentPage.value-1)*pageSize.valueconstend=start+pageSize.valuereturnlist.value.slice(start,end)})consthandlePageChange=(page)=>{currentPage.value=page}// ========== 删除功能 ==========consthandleDelete=(id)=>{constindex=list.value.findIndex(item=>item.id===id)if(index!==-1){list.value.splice(index,1)}}// ========== 编辑功能 ==========consteditRef=ref(null)consthandleEdit=(row)=>{editRef.value.open({...row})}consthandleSave=(formData)=>{constindex=list.value.findIndex(item=>item.id===formData.id)if(index!==-1){list.value[index]={...formData}}}</script><template><divclass="app"><el-table:data="pageData"borderstripe><el-table-columnlabel="ID"prop="id"width="80"></el-table-column><el-table-columnlabel="姓名"prop="name"width="150"></el-table-column><el-table-columnlabel="籍贯"prop="place"></el-table-column><el-table-columnlabel="操作"width="150"><template#default="{ row }"><el-buttontype="primary"link@click="handleEdit(row)">编辑</el-button><el-buttontype="danger"link@click="handleDelete(row.id)">删除</el-button></template></el-table-column></el-table><el-paginationbackgroundlayout="prev, pager, next":total="list.length":current-page="currentPage":page-size="pageSize"@current-change="handlePageChange"/></div><Editref="editRef"@save="handleSave"/></template><stylescoped>.app{width:980px;margin:100px auto 0;}</style>

5.4 Edit.vue — 编辑弹窗子组件

<scriptsetup>import{ref,defineExpose,defineEmits}from'vue'constemit=defineEmits(['save'])// 弹窗开关constdialogVisible=ref(false)// 表单数据constformData=ref({id:'',name:'',place:''})// 打开弹窗(供父组件调用)constopen=(row)=>{formData.value={...row}dialogVisible.value=true}// 保存consthandleSave=()=>{emit('save',formData.value)dialogVisible.value=false}// 暴露 open 方法给父组件defineExpose({open})</script><template><el-dialogv-model="dialogVisible"title="编辑"width="400px"><el-formlabel-width="50px"><el-form-itemlabel="姓名"><el-inputv-model="formData.name"placeholder="请输入姓名"/></el-form-item><el-form-itemlabel="籍贯"><el-inputv-model="formData.place"placeholder="请输入籍贯"/></el-form-item></el-form><template#footer><el-button@click="dialogVisible = false">取消</el-button><el-buttontype="primary"@click="handleSave">确认</el-button></template></el-dialog></template><stylescoped>.el-input{width:290px;}</style>

六、父子组件通信要点

这个项目中涉及几个关键的父子组件通信方式,值得理解:

父调子:defineExpose+ref

// 子组件:暴露方法defineExpose({open})// 父组件:通过 ref 调用consteditRef=ref(null)editRef.value.open(data)// 调用子组件的 open 方法

子传父:defineEmits+emit

// 子组件:声明并发射事件constemit=defineEmits(['save'])emit('save',formData)// 父组件:监听事件<Edit @save="handleSave"/>

七、分页逻辑详解

分页的核心就是用computed计算当前页的数据:

当前页数据 = list.slice((页码 - 1) * 每页条数, 页码 * 每页条数)

pageSize = 5为例:

页码截取范围显示数据
10 ~ 5第1 ~ 第5条
25 ~ 10第6 ~ 第10条
310 ~ 15第11 ~ 第15条

八、常见问题

Q1:引入后样式没有生效?

忘记引入import 'element-plus/dist/index.css',这是最常见的问题。

Q2:组件没有显示?

确认main.js中有app.use(ElementPlus),否则组件不会被注册。

Q3:表格数据不更新?

确保绑定的数据是响应式的(使用refreactive),不要直接操作非响应式数据。

Q4:弹窗打不开?

检查v-model="dialogVisible"中的变量是否是ref,且模板中访问的是dialogVisible而不是dialogVisible.value(模板中会自动解包)。


总结

步骤操作
1️⃣npm install element-plus
2️⃣main.jsimport ElementPlus+app.use(ElementPlus)
3️⃣组件中直接使用<el-xxx>标签
4️⃣数据用ref管理,保证响应式

Element Plus 的官方文档 https://element-plus.org/zh-CN/ 有每个组件的完整 API,遇到不确定的属性可以随时查阅。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 1:19:11

学术写作的超级快充!智能AI论文写作软件,思路秒出超省心

作为一名刚完成毕业论文的过来人&#xff0c;我太懂写论文的痛苦了 —— 选题纠结、资料搜集困难、逻辑梳理混乱、反复修改耗时、格式调整繁琐... 直到我发现了这套 AI 论文写作工具&#xff0c;简直是学术写作的 "开挂神器"&#xff0c;效率直接翻倍&#xff0c;原本…

作者头像 李华
网站建设 2026/6/10 2:22:42

震惊!原来论文还能这样搞定?2026AI智能降重工具推荐合集

还在为查重高、降AIGC难、论文被看穿AI痕迹而发愁&#xff1f;2026年AI论文工具已经全面升级&#xff0c;从构思到成稿全流程智能辅助&#xff0c;帮你轻松应对写作难题&#xff0c;告别焦虑&#xff01;无论是选题思路、内容撰写&#xff0c;还是降重处理、去除AI痕迹、格式调…

作者头像 李华
网站建设 2026/6/10 5:08:20

基于深度学习YOLOv10的森林火灾烟雾识别检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)

一、项目介绍 本项目基于YOLOv10目标检测算法开发了一套专注于森林与野外环境的火灾火焰及烟雾识别系统。模型采用YOLOv10进行训练&#xff0c;能够实现高精度、低延迟的实时火灾预警检测。系统针对森林、山区、草原等开阔野外场景中的早期火情进行监控&#xff0c;可有效识别…

作者头像 李华
网站建设 2026/6/10 2:27:58

护照阅读器再景区应用的核心价值总结

护照阅读器核心价值总结效率&#xff1a;秒级通行&#xff0c;单通道能力提升3–4 倍。体验&#xff1a;多语种、免填表、免翻译&#xff0c;外籍满意度显著提升。安全&#xff1a;证件验伪 黑名单预警 实名追溯&#xff0c;符合涉外安防要求。数据&#xff1a;自动采集国籍 …

作者头像 李华
网站建设 2026/6/9 1:13:53

【Agent】CLAUDE.md —— Agent 记忆落地终极方案

Agent 技术博客系列 &#xff1a;CLAUDE.md —— Agent 记忆落地终极方案 声明&#xff1a;本文为 Agent 技术博客系列第三篇&#xff0c;前两篇分别探讨了 Agent 本质 与 记忆金字塔工程原理。 嗨&#xff0c;我是小z。上一期拆完记忆金字塔之后&#xff0c;这一期&#xff0c…

作者头像 李华