如何给el-table中某一列加指定内容和点击事件
背景:
小颖最近在写项目时遇到了要给 element-ui 中的 el-table 在 v-for el-table-column 标签时给某列加内容和点击事件,项目忙完了想着总结一下,下面一起来看下具体怎么实现吧
页面效果:
公共数据:
data() { return { tableData: [{ date: '2016-05-03', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', sex: '男' }, { date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', sex: '男' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', sex: '男' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', sex: '男' }, { date: '2016-05-08', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', sex: '男' }, { date: '2016-05-06', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄', sex: '男' }, { date: '2016-05-07', name: '李晓梅', address: '上海市普陀区金沙江路 158号', sex: '女' }], } },
公共点击事件:
methods: { toDetail(row, column, event) { console.log('点击地址啦'); } }
公共CSS:
<style lang="scss"> .blue-font-color { color: #409eff; border-bottom: 1px solid #409eff; cursor: default; } </style>
方法一:
使用 slot-scope + v-if + v-else
HTML:
<el-table :data="tableData" height="250" border style="width: 100%"> <el-table-column :prop="dt.prop" :label="dt.labelName" v-for="(dt,index) in colData" :key="index"> <template slot-scope="scope"> <span v-if="dt.prop=='address'" class="blue-font-color" @click="toDetail(scope.row)"> {{ scope.row.address }}</span> <span v-else>{{ scope.row[dt.prop] }}</span> </template> </el-table-column> </el-table>
Javascript:
colData: [
{ prop: 'date', labelName: '日期' },
{ prop: 'name', labelName: '姓名' },
{ prop: 'address', labelName: '地址' },
{ prop: 'sex', labelName: '性别' },
],
方法二:
使用 表格自带的 formatter + row-click事件
HTML:
<el-table :data="tableData" height="250" border style="width: 100%" @row-click="toDetail"> <el-table-column :prop="dt.prop" :label="dt.labelName" v-for="(dt,index) in colData" :key="index" :formatter="dt.formatter"> </el-table-column> </el-table>
Javascript:
data差异:colData: [ { prop: 'date', labelName: '日期' }, { prop: 'name', labelName: '姓名' }, { prop: 'address', labelName: '地址', formatter: (row, column, cellValue, index) => { return <span class='blue-font-color'>{cellValue}</span> } }, { prop: 'sex', labelName: '性别' }, ],
点击事件差异:
toDetail(row, column, event) { if (column.property == "address") { console.log('点击地址啦'); } } }
方法三:
使用 表格自带的 formatter
HTML:
<el-table :data="tableData" height="250" border style="width: 100%"> <el-table-column :prop="dt.prop" :label="dt.labelName" v-for="(dt,index) in colData" :key="index" :formatter="dt.formatter"> </el-table-column> </el-table>
Javascript:
data差异:(tableData 还要的哦,只是这里没写)
data() { const that = this return { colData: [ { prop: 'date', labelName: '日期' }, { prop: 'name', labelName: '姓名' }, { prop: 'address', labelName: '地址', formatter: (row, column, cellValue, index) => { return <span class='blue-font-color' onclick={that.toDetail.bind(null, row)}>{cellValue}</span> } }, { prop: 'sex', labelName: '性别' }, ] } },
点击事件就和上面 公共的点击事件方法 一样。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
2019-11-29 vue : 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\vue.ps1
2016-11-29 word-break: break-all;、word-break: keep-all; 、word-wrap: break-word;和white-space:nowrap;都有什么作用