当前位置: 首页 > news >正文

7.4Element Plus 分页与表格组件

 el-pagination el-table 

这两个组件是后台管理系统中最常用的数据展示与交互组合,通常配合使用实现 分页加载、排序、筛选、操作 等功能。


一、分页组件 el-pagination

用于控制大量数据的分页展示。

✅ 基本结构
<el-paginationv-model:current-page="currentPage"v-model:page-size="pageSize":total="total":page-sizes="[10, 20, 50, 100]"layout="total, sizes, prev, pager, next, jumper"background
/>

🔧 核心属性(Props)
属性类型说明默认值
v-model:current-pagenumber当前页码(双向绑定)1
v-model:page-sizenumber每页条数(双向绑定)10
totalnumber总数据条数0
page-sizesnumber[]每页显示条数选择器选项[10, 20, 30, 40, 50, 100]
layoutstring组件布局,用逗号分隔'prev, pager, next'
backgroundboolean是否为按钮添加背景色false
disabledboolean是否禁用分页false
smallboolean是否使用小型分页false

layout 可选值

  • total: 总条数
  • sizes: 每页条数选择器
  • prev: 上一页
  • pager: 页码列表
  • next: 下一页
  • jumper: 跳转输入框
  • ->: 分隔符(将后续元素推到右侧)

📢 事件(Events)
事件说明回调参数
@size-change每页条数改变时触发改变后的 pageSize
@current-change当前页改变时触发改变后的 currentPage
@prev-click点击上一页时触发-
@next-click点击下一页时触发-

⚠️ 注意:使用 v-model 后,通常只需监听 @size-change@current-change 来重新请求数据。


二、表格组件 el-table

用于展示结构化数据。

✅ 基本结构
<el-table :data="tableData" style="width: 100%"><el-table-column prop="name" label="姓名" /><el-table-column prop="age" label="年龄" />
</el-table>

🔧 表格核心属性(el-table Props)
属性类型说明
dataarray显示的数据源
stripeboolean是否显示斑马纹
borderboolean是否显示纵向边框
fitboolean列宽是否自撑开
heightstring/number固定高度,超出出现滚动条
max-heightstring/number最大高度
highlight-current-rowboolean高亮当前行
empty-textstring数据为空时显示文本
v-loadingboolean是否显示加载中

🔧 列定义 el-table-column 属性
属性类型说明
typestring列类型:selectionindexexpand
labelstring列标题
propstring对应字段名
width / min-widthstring/number列宽
fixedstring/boolean固定列:leftright
sortableboolean/string是否可排序,custom 为自定义
formatterFunction格式化内容函数
show-overflow-tooltipboolean内容过长显示 tooltip
align / header-alignstring对齐方式:leftcenterright

🧩 高级功能
1. 复选框列
<el-table-column type="selection" width="55" />
2. 序号列
<el-table-column type="index" label="序号" width="80" />
3. 可展开行
<el-table-column type="expand"><template #default="props"><p>详情:{{ props.row.detail }}</p></template>
</el-table-column>
4. 自定义列模板
<el-table-column label="操作" width="180"><template #default="{ row }"><el-button size="small" @click="edit(row)">编辑</el-button><el-button size="small" type="danger">删除</el-button></template>
</el-table-column>
5. 排序
<el-table-column prop="age" label="年龄" sortable />
<!-- 或自定义排序 -->
<el-table-column prop="age" label="年龄" sortable="custom" @sort-change="handleSort" />
6. 筛选
<el-table-columnprop="tag"label="标签":filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]":filter-method="filterTag"
/>
function filterTag(value, row) {return row.tag === value
}

三、实战案例(完整)

<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'// 响应式数据
const tableData = ref([])
const total = ref(0)
const loading = ref(false)// 分页
const currentPage = ref(1)
const pageSize = ref(10)// 搜索与排序
const searchKey = ref('')
const sortState = reactive({ prop: '', order: '' })// 模拟数据获取
const fetchData = () => {loading.value = truesetTimeout(() => {const allData = Array.from({ length: 100 }, (_, i) => ({id: i + 1,name: `用户${i + 1}`,age: 18 + (i % 50),address: `地址 ${i + 1}`}))// 搜索let filtered = allData.filter(item => item.name.includes(searchKey.value))// 排序if (sortState.prop && sortState.order) {filtered.sort((a, b) => {const diff = a[sortState.prop] - b[sortState.prop]return sortState.order === 'descending' ? -diff : diff})}// 分页const start = (currentPage.value - 1) * pageSize.valueconst end = start + pageSize.valuetableData.value = filtered.slice(start, end)total.value = filtered.lengthloading.value = false}, 500)
}// 事件
const handleSearch = () => {currentPage.value = 1fetchData()
}const handleSortChange = ({ prop, order }) => {sortState.prop = propsortState.order = ordercurrentPage.value = 1fetchData()
}const handleEdit = (row) => ElMessage.info(`编辑:${row.name}`)
const handleDelete = (row) => {ElMessageBox.confirm(`删除 ${row.name}?`, '确认', { type: 'warning' }).then(() => ElMessage.success('删除成功')).catch(() => ElMessage.info('取消'))
}onMounted(() => fetchData())
</script><template><div class="p-4"><div class="flex justify-between mb-4"><h3 class="text-lg font-medium">用户列表</h3><el-input v-model="searchKey" placeholder="搜索姓名" @input="handleSearch" style="width: 240px" /></div><el-table :data="tableData" stripe border v-loading="loading" @sort-change="handleSortChange"><el-table-column type="index" label="序号" width="80" /><el-table-column prop="name" label="姓名" sortable /><el-table-column prop="age" label="年龄" sortable width="100" /><el-table-column prop="address" label="地址" show-overflow-tooltip /><el-table-column label="操作" width="160"><template #default="{ row }"><el-button size="small" @click="handleEdit(row)">编辑</el-button><el-button size="small" type="danger" @click="handleDelete(row)">删除</el-button></template></el-table-column></el-table><el-paginationv-model:current-page="currentPage"v-model:page-size="pageSize":total="total"layout="total, sizes, prev, pager, next, jumper"background@size-change="fetchData"@current-change="fetchData"class="mt-4 justify-end"/></div>
</template>


文章转载自:

http://V7m9UaCd.bsrcr.cn
http://n6cL5o1T.bsrcr.cn
http://fEsJMV2v.bsrcr.cn
http://9EBDavF5.bsrcr.cn
http://am4F22mq.bsrcr.cn
http://5fZeqgQ9.bsrcr.cn
http://3mCQiivL.bsrcr.cn
http://38XZNduR.bsrcr.cn
http://vjhU868c.bsrcr.cn
http://DbjgmGq5.bsrcr.cn
http://xBJaPSF0.bsrcr.cn
http://sq8SqOCJ.bsrcr.cn
http://TfBy38up.bsrcr.cn
http://A9fGBrO1.bsrcr.cn
http://Nd92C3Bx.bsrcr.cn
http://6xklirmG.bsrcr.cn
http://xNZWYMep.bsrcr.cn
http://itxi7JfA.bsrcr.cn
http://O8NS6xDW.bsrcr.cn
http://tEaS7OUw.bsrcr.cn
http://IoK916Li.bsrcr.cn
http://h71xw8nm.bsrcr.cn
http://NDS7HxtE.bsrcr.cn
http://MrOAJdXS.bsrcr.cn
http://Dyc02suN.bsrcr.cn
http://cVnw8TOQ.bsrcr.cn
http://xTm4bfGu.bsrcr.cn
http://ZZgmaUHx.bsrcr.cn
http://lqk1dejO.bsrcr.cn
http://MK9NXMk8.bsrcr.cn
http://www.dtcms.com/a/364452.html

相关文章:

  • java spring cloud 企业工程管理系统源码+二次开发+定制化服务
  • 深兰科技AI问诊助手走访打浦桥街道社区卫生服务中心
  • Llama.cpp与CUDA Graph:深度学习推理框架的兼容性深度解析
  • Elasticsearch(text和keyword)区别分析
  • 怎么删除word空白页?【图文详解】删除最后一页空白页?5种删除word文档空白页方法?
  • Few-Shot Prompting 实战:用5个例子让GPT-4学会复杂任务
  • 线程与同步
  • 【Unity Shader学习笔记】(四)Shader编程
  • Java设计模式之结构型—适配器模式
  • SQLAlchemy ORM 入门教程
  • Low-Light Image Enhancement via Structure Modeling and Guidance 论文阅读
  • SQLint3 模块如何使用
  • Linux awk命令完全指南:从原理到实战,搞定文本处理难题
  • SQL(window)日志在linux 下查看
  • LangChain实战(十三):Agent Types详解与选择策略
  • 机器学习从入门到精通 - KNN与SVM实战指南:高维空间中的分类奥秘
  • Spring Boot 工程启动时自动执行任务方法
  • 图像正向扭曲反向扭曲
  • 安全测试漫谈:如何利用X-Forwarded-For头进行IP欺骗与防护
  • 停止所有dcoker容器
  • [UT]记录uvm_config_db的错误:get中的第二个参数设置为this
  • 第6章:垃圾回收分析与调优
  • 【NVIDIA B200】1.alltoall_perf 单机性能深度分析:基于 alltoall_perf 测试数据
  • 从卡顿到丝滑:3 个实战场景教你搞定代码性能优化
  • DeepSeek、GPT-5都在卷的“快慢脑”,腾讯中科院给出了更优解:还是多模态的!
  • 什么是科技成果鉴定测试?成果鉴定测试报告带给企业什么好处?
  • c语言链表:从入门到精通
  • 深度学习篇---SGD+Momentum优化器
  • wpf之Border
  • 嵌入式 - 硬件:51单片机(2)