表格中我们经常需要动态加载数据, 如果有多个页面都需要用到表格, 那我希望可以有个组件, 只传数据过去显示, 不用每个页面都去写这么一段内容:
<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. 表格组件:
"htmlcode">
<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 } },
"htmlcode">
<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' "text-align: center">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' "htmlcode">import validator from '@/utils/validate' Vue.use(validator)最后页面上就可以直接使用
{ prop: 'laneno', label: '数据类型', formatData: this.lanenoTransf },最最后, 看我的表格:
总结
以上所述是小编给大家介绍的vue项目中将element-ui table表格写成组件的实现代码 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]