二次封装Element UI Table实现动态列
开发中是否会遇见在一个页面中加载的table的列是不固定的,列名需要根据后台数据而动态加载;so element ui 的table 已经不再满足需求,我们得在他的基础上再次封装
增加 refactor_table.vue 组件
<template>
<el-table :data="tableData"
border
:height="tableHeight"
style="width: 100%"
v-loading="tableLoading"
:size="tableSize"
>
<el-table-column
v-for="(th, key) in tableColumnsConfig"
:key="key"
:prop="th.prop"
:label="th.label"
:fixed="th.fixed"
:width="th.width"
:align="th.align"
show-overflow-tooltip="true">
<template slot-scope="scope">
<div v-if="th.prop==''">
<el-button v-for="(btn,index) in th.operate" type="text" size="small" :key="index"
:style="btn.type=='del'?'color:#ff3e3e' : ''" @click="btnHandle(scope.row,btn.type)">
{{btn.name}}
</el-button>
</div>
<div v-else>
<span>{{ scope.row[th.prop] }}</span>
</div>
</template>
</el-table-column>
</el-table>
</template>
<script>
export default {
name: 'refactor_table',
props: {
/**
* table 渲染所需数据
* 如:[{id:1,name:'abc'},{id:2,name:'def'}]
*/
tableData: {
type: Array,
default: function () {
return []
}
},
/**
* 设置table 加载icon
*/
tableLoading: {
type: Boolean,
default: false
},
/**
* 设置table 高度
*/
tableHeight: {
type: Number
},
/**
* 设置table 大小(medium / small / mini)
*/
tableSize:{
type:String
},
/**
* table 的column 相关配置信息
* 如:[{
* prop: 'id',
label: '编号',
width: 100,
align: 'center'
}]
如果需要操作列需要指定prop为空同时增加operate属性,配置如下
[{
prop: '',
label: '操作',
width: 280,
align: 'center',
operate:[
{
type:'del',
name:'删除',
},
{
type:'add',
name:'新增',
}
]]
*/
tableColumnsConfig: {
type: Array,
default: function () {
return []
}
}
},
methods: {
btnHandle(row, type) {
this.$emit("operateHandle", row, type)
}
}
}
</script>
在main.ve中调用
<template>
<div> <refactor-table :table-data="tableData"
:table-columns-config="tableColumns"
:table-loading="loading"
:tableSize="tableSize"
@operateHandle="tableOperateHandle"
></refactor-table>
</div>
</template> <script type="text/ecmascript-6">
import RefactorTable from '@/components/refactor_table'; export default {
data() {
return {
tableHeight: 300,
tableData: [],
tableColumns: [],
tableSize: 'mini'
}
},
created() {
this.loadingTable();
},
methods: {
loadingTable() {
// 初始化table 数据
this.tableData = [
{id: '1938238', name: '节点', grade: 'ERWFD'},
{id: '3241', name: '节点B', grade: 'FDD'},
{id: '8238', name: '节点C', grade: 'FVDFA'},
{id: '3424', name: '节点', grade: 'ERWFD'},
{id: '32ree', name: '节点B', grade: 'FDD'},
{id: '821221', name: '节点C', grade: 'FVDFA'},
{id: '89238', name: '节点', grade: 'ERWFD'},
{id: '323432', name: '节点B', grade: 'FDD'},
{id: '2231545', name: '节点C', grade: 'FVDFA'},
{id: '213435', name: '节点C', grade: 'FVDFA'}
];
// 初始化 table columns
for(let key in this.tableData[0]){
this.tableColumns.push({
prop: key,
label: key,
align: 'center'
});
}
// 最后增加一列为操作
this.tableColumns.push( {
prop: '',
label: '操作',
width: 280,
align: 'center',
operate:[
{
type:'del',
name:'删除',
},
{
type:'add',
name:'新增',
}
]});
},
/**
* 接收table 组件操作时传入的参数
* @param row {object} 所选行
* @param type {String} 操作类型(add,del)
*/
tableOperateHandle(row,type){
console.log(row,type)
}
},
components: {
RefactorTable
}
}
</script>
运行预览

二次封装Element UI Table实现动态列的更多相关文章
- element ui table表头动态筛选条件
本文主要实现:根据el-table表格数据自动生成表头筛选条件的方法,可根据表格数据动态调整. el-table表格的表头增加筛选功能,大家平时都是怎么实现的呢?先看看官方文档的例子: 1 <t ...
- element UI table 过滤 筛选问题
一.问提描述 使用elementUI table 官方筛选案例,发现筛选不是服务器端筛选,而是浏览器端对每一页进行单独筛选. 如何在服务器端筛选? 二.查询Element UI 官网table组 ...
- Vue+element ui table 导出到excel
需求: Vue+element UI table下的根据搜索条件导出当前所有数据 参考: https://blog.csdn.net/u010427666/article/details/792081 ...
- Element UI table组件源码分析
本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...
- VUE -- 对 Element UI table中数据进行二次处理
时间——日期 后台经常给我们返回的是 时间戳 (例如:1535620671) 这时候我们页面展现的时候需要将时间戳转换为我们要的格式 例如 (YYYY-MM-DD HH:mm:ss) 如果是在Elem ...
- Element UI table参数中的selectable的使用
Element UI table参数中的selectable的使用中遇到的坑:页面: <el-table-column :selectable='selectable' type="s ...
- vue+element ui 的tab 动态增减,切换时提示用户是否切换
前言:工作中用到 vue+element ui 的前端框架,动态添加 Tab,删除 Tab,切换 Tab 时提示用户是否切换等,发现 element ui 有一个 bug,这里记录一下如何实现.转载 ...
- element ui table(表格)点击一行展开
element ui是一个非常不错的vue的UI框架,element对table进行了封装,简化了vue对表格的渲染. element ui表格中有一个功能是展开行,在2.0版本官网例子中,只可以点击 ...
- 上传图片组件封装 element ui
// element ui 文档地址: http://element.eleme.io/#/zh-CN <template> <div> <div class=" ...
- element ui table 导出excel表格
https://blog.csdn.net/u010427666/article/details/79208145 vue2.0 + element UI 中 el-table 数据导出Excel1. ...
随机推荐
- Github账户的注册
注册步骤 首先进入github官网界面(注意,只能用Chrome或者Firefox浏览器.这样保险性更强一些) 官网地址:https://github.com/ 映入眼帘的界面是这样的: 点击右上角的 ...
- 把 ChatGPT 加入 Flutter 开发,会有怎样的体验?
前言 ChatGPT 最近一直都处于技术圈的讨论焦点.它除了可作为普通用户的日常 AI 助手,还可以帮助开发者加速开发进度.声网社区的一位开发者"小猿"就基于 ChatGPT 做了 ...
- hdfs的异构存储
目录 1 背景 2 hdfs异构存储类型和存储策略 2.1 hdfs支持的存储类型 2.2 hdfs如何知道数据存储目录是那种存储类型 2.3 存储策略 2.3.1 在hdfs中支持如下存储策略 2. ...
- Moebius兼容AlwaysOn
背景 数据库是信息化的基石,支撑着整个业务系统,发挥着非常重要的作用,被喻为"IT的心脏".因此,让数据库安全.稳定.高效地运行已经成为IT管理者必须要面对的问题.数据库在底层架构 ...
- python入门教程之五数据结构
变量 Python 变量类型 变量存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同 ...
- pandas之聚合函数
在<Python Pandas窗口函数>一节,我们重点介绍了窗口函数.我们知道,窗口函数可以与聚合函数一起使用,聚合函数指的是对一组数据求总和.最大值.最小值以及平均值的操作,本节重点讲解 ...
- [Linux]CentOS7:卸载、安装Java JDK
JDK(Java Development Kit)是Java语言的软件开发工具包,包括Java运行环境.Java开发工具.Java基础类库. JRE(Java Runtime Environment) ...
- [数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案
前言 吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了. 下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现 ...
- kali装机 安装输入法 修改国内源
1-先配置国内源官方kali源 vim /etc/apt/sources.list 插入如下源 deb http://mirrors.aliyun.com/kali sana main non-fre ...
- 多线程socketserver
模块:socketserver tcp协议: 服务端: import socketserver class MyRequestHandle(socketserver.BaseRequestHandle ...