vue项目中将element-ui table表格写成组件的实现代码
作者:sosoqi 发布时间:2024-05-28 15:55:31
表格中我们经常需要动态加载数据, 如果有多个页面都需要用到表格, 那我希望可以有个组件, 只传数据过去显示, 不用每个页面都去写这么一段内容:
<el-table :data="tableData" border size="mini" fit highlight-current-row height="500">
<el-table-column type="index" align="center" fixed></el-table-column>
<el-table-column prop="DHM" min-width="140px" label="时间" align="center"></el-table-column>
<el-table-column prop="PLAZANO" min-width="100px" label="编码" align="center"></el-table-column>
<el-table-column prop="PLAZANAME" min-width="100px" label="名称" align="center"></el-table-column>
<el-table-column prop="CAR_PLATE" label="号码" align="center"></el-table-column>
<el-table-column prop="CARD_NO" min-width="120px" label="卡号" align="center"></el-table-column>
<el-table-column prop="DATATYPE" label="数据类型" align="center" :formatter="formatDATATYPE"></el-table-column>
<el-table-column prop="STAFFNAME" min-width="100px" label="姓名" align="center"></el-table-column>
<el-table-column prop="MEDIATYPE" label="付款方式" align="center"></el-table-column>
<el-table-column prop="COMP_CASH" label="计算费额" align="center"></el-table-column>
<el-table-column prop="FACT_CASH" label="实收费额" align="center"></el-table-column>
<el-table-column label="操作" min-width="140px" align="center">
<template slot-scope="scope">
<el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
<el-button type="text" size="small">编辑</el-button>
</template>
</el-table-column>
</el-table>
上面这段代码是一个element-ui中tabele表格的形式,这里表头都是已经固定的, 如果每个页面都写上这么一段, 不同的是表头名字和字段,这样子就有点重复,而且页面的篇幅也就比较大了,于是把这块写成一个组件, 每个页面引入这个组件, 再传入数据。
1. 表格组件:
•首先 table.vue 组件可以这样写:
<el-table :data="tableData" border size="mini" fit highlight-current-row height="500" :row-style="rowStyle" @row-dblclick="rowDblclick"
v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.3)">
<el-table-column type="index" align="center" fixed></el-table-column>
<!-- prop: 字段名name, label: 展示的名称, fixed: 是否需要固定(left, right), minWidth: 设置列的最小宽度(不传默认值), oper: 是否有操作列
oper.name: 操作列字段名称, oper.clickFun: 操作列点击事件, formatData: 格式化内容 -->
<el-table-column v-for="(th, key) in tableHeader"
:key="key"
:prop="th.prop"
:label="th.label"
:fixed="th.fixed"
:min-width="th.minWidth" align="center">
<!-- 加入template主要是有操作一栏, 操作一栏的内容是相同的, 数据不是动态获取的,不过我这里操作一栏的名字定死了(oper表示是操作这一列,否则就不是) -->
<template slot-scope="scope">
<div v-if="th.oper">
<el-button v-for="(o, key) in th.oper" :key="key" @click="o.clickFun(scope.row)" type="text" size="small">{{o.name}}</el-button>
</div>
<div v-else>
<span v-if="!th.formatData">{{ scope.row[th.prop] }}</span>
<span v-else>{{ scope.row[th.prop] | formatters(th.formatData) }}</span>
</div>
</template>
</el-table-column>
</el-table>
// 这里是传入的数据
props: {
tableData: {
type: Array,
default: function () {
return []
}
},
rowDblclick: {
type: Function,
default: (row, event, column) => { console.log('default: ' + row + '---' + event + '---' + column) }
},
tableHeader: {
type: Array,
default: function () {
return []
}
},
loading: {
type: Boolean,
default: false
}
},
• 然后在其他组件中就可以引入table组件, 将数据传给table显示
<table :tableData="tableData" :rowDblclick="rowDblclick" :tableHeader="tableHeader" :loading="loading"></table>
其中 tableData是表格中要显示的数据内容, 这个内容我的是从后台查询出来的, rowDblclick 是双击一行做的操作,如果不需要可以删除, tableHeader 是表头显示的数据, loading 是表格加载的loading方式, 默认是没有的
表头数据格式如下: formatData 是表格里面的数据需要做处理的方法, oper是操作列,查看和编辑是两个按钮,handleClick和editClick点击按钮的方法, 自行补充。
export const tableHeader = [ // 表头数据
{ prop: 'dhm', label: '时间', minWidth: '140px' },
{ prop: 'plazano', label: '编码', minWidth: '100px' },
{ prop: 'plazano', label: '名称', minWidth: '100px', formatData: val => store.getters.allPlazano2Map.get(val) },
{ prop: 'car_plate', label: '号码' },
{ prop: 'card_no', label: '卡号', minWidth: "120px" },
{ prop: 'laneno', label: '数据类型', formatData: function(val) { return val.substr(2, 1) == '1' ? '出口' : '入口' } },
{ prop: 'staffname', label: '姓名', minWidth: '100px' },
{ prop: 'mediatype', label: '付款方式' },
{ prop: 'comp_cash', label: '计算费额' },
{ prop: 'fact_cash', label: '实收费额' },
{ prop: 'oper', label: '操作', fixed: 'right', minWidth: '140px',
oper: [
{ name: '查看', clickFun: handleClick },
{ name: '编辑', clickFun: editClick }
]
}
]
现在的代码可能会报错, 下面这处的代码是在全局注册了一个过滤器,如果不注册就找不到这个方法就会报错,所以还需要注册一个全局过滤器,如果你不需要对数据做处理可以不要这个过滤器
2. 注册全局过滤器, 我的是这样写的, 先新建个文件 filter.js 然后在里面写个方法, export 出去
export function formatters(val, format) {
if (typeof (format) === 'function') {
return format(val)
} else return val
}
然后再在main.js中引入进来注册全局的过滤器:
import * as filters from './filters'
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key])
})
这个在每个页面就都可以使用 formatters 这个过滤器方法了, 不过具体的过滤方法是由 format 这个参数传进去的, 这里主要是因为不同的数据过滤的方法不一样, 所以在表头传数据的时候就一并写上处理数据的方法
如果很多地方都使用了同一个方法, 可以将这个方法注册成全局方法, 那么在每个页面就可以直接使用该方法, 不用重复去写。
3. 注册全局方法
建立个js 文件(我的文件名为validate.js), 写入该方法, 这里使用 exports.install 注册全局方法,挂载到vue原型上
exports.install = (Vue, options) => {
Vue.prototype.validator = {
lanenoTransf(val) { return val.substr(2, 1) == '1' ? '出口' : '入口' }
}
}然后在main.js中引入
import validator from '@/utils/validate'
Vue.use(validator)
最后页面上就可以直接使用
{ prop: 'laneno', label: '数据类型', formatData: this.lanenoTransf },
最最后, 看我的表格:
总结
以上所述是小编给大家介绍的vue项目中将element-ui table表格写成组件的实现代码 ,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/sosoqi/p/9438549.html
猜你喜欢
- lambda函数lambda是什么大家好,今天给大家带来的是有关于Python里面的lambda表达式详细解析。lambda在Python里
- elementUI 实现一个自定义的表单模板组件注:该功能基于elementUI 背景:在项目开发中,我们会遇到这种需求,在管理后台添加自定
- 本文实例讲述了Python实现链表反转的方法。分享给大家供大家参考,具体如下:Python实现链表反转链表反转(while迭代实现):链表的
- 不知道有没有人碰到过这样恶心的问题:两张表连接查询并limit,SQL效率很高,但是加上order by以后,语句的执行时间变的巨长,效率巨
- 二分类问题可能是应用最广泛的机器学习问题。今天我们将学习根据电影评论的文字内容将其划分为正面或负面。一、数据集来源我们使用的是IMDB数据集
- 一、前言在Python开发的过程中,为了实现某项功能,经常需要对某些字符串进行特殊的处理,如拼接字符串、截取字符串、格式化字符串等。下面将对
- pandas返回缺失值位置有的时候我们可能需要获取一些缺失值的信息,因此我们需要获取这些缺失值在DataFrame中的位置。假如我们的Dat
- 1、查找表结构,判断要加入的列是否已存在2、如果不存在,则执行添加 CREATE PROCEDURE `mysql_sp_add_
- 什么是 PIP?PIP 是 Python 包或模块的包管理器。注释:如果你使用的是 Python 3.4 或更高版本,则默认情况下会包含 P
- 思路整理:1、进入心灵鸡汤网页,使用python获取心灵鸡汤内容2、登陆微信,找到需要发送的朋友3、发送获取的内容1、获取心灵鸡汤的内容如下
- python flask搭建web应用教程1.flask介绍2.所需工具和环境3.搭建flaskApp4.具体程序编写5.综上1.flask
- 本文为大家分享了JavaScript实现省市联动过程中bug的解决方法,供大家参考,具体内容如下先把实现省市联动遇到的问题描述一下1.1.原
- Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。这篇文章使用tk
- 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可进行。每个MySQL用户帐号都有许多与之相关连的属性,例如用户名、密码以及权限
- 之前一直是通过Visual Studio直接F5来运行自己编写的项目或者小程序,很少通过部署发布到IIS上面,于是自己便在自己的笔记本上进行
- 见以下两个文件:showimage.asp Change the HTTP header
- 图片版PDF无法复制,转化成文字版的PDF后使用更方便. 我们需要用到python3.6,pypdf2,ghostscript,Python
- 写在前面今天Python笔记的内容是:异常处理一旦Python脚本发生异常,程序需捕获并处理异常。异常处理使得程序能够在处理异常后继续正常执
- 本文记录了如何在Pytorch中使用Tensorboard(主要是为了备忘)前言虽然我本身就会用TensorBoard,但是因为Tensor
- 1.什么是MD5加密MD5消息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出