恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

前端封装el-table及注意点

  • 首页
  • 资讯中心
  • /
  • 前端封装el-table及注意点

相关资讯

蓝桥杯Scratch国赛“神奇画笔”解题全攻略:从坐标循环到图形绘制 2026/8/28 7:46:32
走进昆山本土焊接工厂 重载腔体定制生产实拍展示 2026/8/28 7:46:32
YOLO目标检测实战:基于小型行人车辆数据集的训练、评估与优化 2026/8/28 7:41:32

最新资讯

数学建模实验一:线性回归预测与模型诊断全流程解析
Shopify AI搜索优化实战:理解句柄、语义搜索与Google流量承接
如何让 AI 编程助手按职业流程写代码:Superpowers 快速上手
用Grok Bot打造高效客户发现流程:从访谈准备到证据沉淀
AI辅助游戏开发全流程:从零到可玩Demo的实践指南
蓝桥杯国赛C组真题深度解析:Java算法实战与备赛心法

今日推荐

2026学术工具专业测评|Paperxie全维度性能实测报告[特殊字符]
凭什么稳居论文工具顶流[特殊字符]Paperxie综合实力深度全解析
2026论文工具深度测评|为什么Paperxie是目前最稳的学术工具✅

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

前端封装el-table及注意点

发布时间:2026/8/28 7:46:32
前端封装el-table及注意点 table封装文件templatedivclasstableBoxel-table:dataprops.tDatastylewidth:100%height100%:borderprops.borderstripehighlight-current-rowreftableRefselection-changehandleSelectionChange!-- 多选列 --el-table-columntypeselectionwidth55v-ifprops.showSelection/!-- 序号 --el-table-columnlabel序号width60aligncenterv-ifprops.showIndextemplate#default{$index}{{ (props.pageNum -1) * props.pageSize $index 1 }}/template/el-table-columnel-table-columnv-for(item, index) in props.configColumns:keyindex:propitem.prop:labelitem.label:widthitem.widthshow-overflow-tooltipaligncenter!-- 自定义列 --template#default{row}slot:namecol-${item.prop}:rowrow{{ row[item.prop] }}/slot/template/el-table-column!-- 操作列 --el-table-columnlabel操作v-if$slots[action]:widthprops.actionWidth || 180aligncentertemplate#default{row}slotnameaction:rowrow/slot/template/el-table-column/el-table/div/templatescriptsetupimport{ref,onMounted,reactive,}fromvueimport{ElMessage,ElMessageBox}fromelement-plus;consttableRefref()constemitdefineEmits([selection-change])constpropsdefineProps({tData:{type:Array,default:()[]},configColumns:{type:Array,default:()[]},border:{type:Boolean,default:false,},actionWidth:{type:Number,default:180,},showIndex:{type:Boolean,default:false,},showSelection:{type:Boolean,default:false,},pageNum:{type:Number,default:1,},pageSize:{type:Number,default:10,},})consthandleSelectionChange(selectedRows){emit(selection-change,selectedRows)}consttableClearSelection(){tableRef.value.clearSelection()}defineExpose({tableClearSelection})conststatereactive({})onMounted((){})/scriptstylelangscssscoped.tableBox{margin-bottom:1%;}/style组件中使用el-buttontypeinfoplainclickresetHandle重置/el-buttonel-buttontypeprimaryclick.stopdeleteBatchHandle批量删除/el-buttondivclasstableBoxfe-table:tDatatableData:configColumnscsOptionsborder:showIndextrue:showSelectiontrue:pageNumpage.pageNum:pageSizepage.pageSizeselection-changeonSelectionChangereffeTableRef!-- 自定义列 --template#col-cslb{row}el-tag:typerow.cslb 0 ? success : danger{{ row.cslb 0 ? 启用 : 停用 }}/el-tag/template!-- 自定义列添加颜色 --template#col-csmc{ row }spanstylecolor:#1890ff;font-weight:bold;{{ row.csmc }}/span/template!-- 操作列 --template#action{row}:widthprops.actionWidth || 180el-buttontypeprimarylinkclickdeleteHandle(row)删除/el-buttonel-buttontypeprimarylinkclickseeHandle(row)查看/el-button/template/fe-table/divdivclasspageBoxel-paginationbackgroundsize-changesizeChangecurrent-changecurrentChange:current-pagepage.pageNum:page-sizepage.pageSize:page-sizes[10, 20, 50, 100,]layouttotal,sizes,prev,pager,next,jumper:totaltotal/el-pagination/divscriptsetupimport{ref,onMounted,reactive,}fromvueimportFeTablefrom/components/fe-table/fe-table.vueconstfeTableRefref()consttableDataref([{id:0,csmc:名称,cslb:0,csbh:编号,ssfj:单位,},{id:1,csmc:名称,cslb:1,csbh:编号,ssfj:单位,},{id:2,csmc:名称,cslb:0,csbh:编号,ssfj:单位,},{id:3,csmc:名称,cslb:1,csbh:编号,ssfj:单位,},{id:4,csmc:名称,cslb:1,csbh:编号,ssfj:单位,},{id:5,csmc:名称,cslb:1,csbh:编号,ssfj:单位,},{id:6,csmc:名称,cslb:0,csbh:编号,ssfj:单位,},])constcsOptionsref([{prop:csmc,label:场所名称},{prop:cslb,label:场所类别},{prop:csbh,label:场所编号},{prop:ssfj,label:所属单位},])consttotalref(0)constpagereactive({pageSize:10,pageNum:1,})conststatereactive({selectList:[]})constsizeChange(val){page.pageSizeval}constcurrentChange(val){page.pageNumval}constonSelectionChange(selectList){console.log(selectList,选中行)state.selectListselectList}// 清空表格多选比如切换分页、查询重置时调用constresetHandle(){feTableRef.value.tableClearSelection()// 清空表格多选}//批量删除constdeleteBatchHandle(){if(state.selectList.length0){ElMessage.warning(请选择至少一条数据)return}constselectIdsstate.selectList.map(elel.id)ElMessageBox.confirm(此操作将删除该数据,是否继续?,提示,{confirmButtonText:确定,cancelButtonText:取消,type:warning}).then((){console.log(可以发请求了)// xxxxAPI({ idList: ids }).then(res{// console.log(res.data, ddd)// if(res.data.code 200){// ElMessage.success(res.data.msg)// getList()// }else{// ElMessage.error(res.data.msg)// }// })})}/script涉及的知识点连续序号(pageNum‑1)*pageSize $index 1切换分页时序号不会从 1 重新开始分页组件里修改 pageNum、pageSize 传给 fe‑table 即可。不同页面不同单元格渲染动态命名插槽插槽命名规则#col-字段名哪个页面需要特殊渲染就写对应插槽不需要就不写自动展示原始值。操作列每个页面独立封装组件只预留插槽按钮、事件全部在业务页面写多个业务页面引入 fe‑table各自写自己的#action互不干扰。一、详解 动态命名插槽!-- fe-table 组件封装里的写法 --!-- 自定义列 --template#default{row}slot:namecol-${item.prop}:rowrow{{ row[item.prop] }}/slot/template!-- 业务组件中使用时的写法 --!-- 只针对 effectFlag 字段进行单元格渲染 --template#col-effectFlag{ row }span{{ row.effectFlag 0 ? 启用 : 停用 }}/span/templatecol-${item.prop}是动态插槽名col是前缀根据需求可以自主命名item.prop就是列配置里的字段名例如 effectFlag、name、createTime当 item.prop “name” → 实际插槽名字col-name当 item.prop “effectFlag” → 实际插槽名字col-effectFlag{ row }是插槽传出来的行对象可以拿到当前行全部数据。name、createTime 没有写对应插槽就会走组件内部默认 {{ row.name }}原样输出。坑点 插槽名严格匹配col‑effectFlag不能写错大小写prop 是什么插槽后缀就是什么。二、外部传入操作列插槽 action场景表格的操作列每个页面按钮完全不一样页面 A编辑、删除页面 B查看、复制、导出页面 C审核、驳回使用方法fe-table组件里写!-- 如果外部使用了 table‑operate 插槽才渲染这一列 --el-table-columnlabel操作:widthprops.actionWidth || 180v-if$slots[action]aligncentertemplate#default{ row }!-- 把 row 行数据透传给外部插槽外部拿row做按钮事件 --slotnameaction:rowrow/slot/template/el-table-columnaction是自己起的名字你也可以叫 table-operate 或者其他$slots[action]是Vue内置判断父组件有没有传入这个名字的插槽。没有就不渲染操作列。如果某个页面不需要操作列直接不写 #action 模板组件内部v‑if$slots[action]自动隐藏操作列业务页面使用!-- A页面使用 --fe-table:tDatatableData:configColumnscsOptions......!-- 操作列当前页面自己写按钮和事件 --template#action{ row }el-buttonlinktypeprimaryclickhandleEdit(row)编辑/el-buttonel-buttonlinktypedangerclickhandleDel(row)删除/el-button/template/fe-table!-- B页面使用 --fe-table:tDatatableData2:configColumnscsOptions2......template#action{ row }el-buttonlink查看/el-buttonel-buttonlink复制/el-buttonel-buttonlink审核/el-button/template/fe-table最后两者对比总结类型动态字段插槽 column‑xxx操作列插槽 action用途普通单元格自定义渲染状态转换、标签、格式化整列操作按钮编辑 / 删除 / 审核插槽命名根据 prop 动态生成#column‑prop值固定名字 #action触发条件需要特殊格式化的列才写不写用默认值需要操作按钮才写不写整列消失传参{ row } 当前行数据{ row } 当前行数据组件改动组件只写兜底显示业务接管覆盖组件只渲染外壳列按钮全部交给业务常见踩坑prop 大小写要和插槽后缀完全一致prop:effectFlag →插槽 #column-effectFlag不能写成 #column‑EffectFlag。动态插槽语法v-slot:[column-${item.prop}]里面是反引号不是单引号。插槽解构 {row} 不要丢否则拿不到行数据。操作列不写插槽模板就不会出现操作列不需要手动加 v‑if 控制。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号