二次封装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. ...
随机推荐
- 【VSC】ERROR:GDB exited unexpectedly.
[VSC]ERROR:GDB exited unexpectedly. 记录一次调试所遇bug的查找历程 问题描述 ERROR: GDB exited unexpectedly. Debugging ...
- [Python]语音识别媒体中的音频到文本
@ 目录 准备工作 视频转音频 识别音频到文本 音频直接转换文本 准备工作 安装python3环境 申请一个可用的语音转换API,此篇以Microsoft Azure Speech为例 在Micros ...
- QML和QT
推荐一些学习qml教程 Qt官方的QML教程: https://doc.qt.io/qt-5/qtqml-index.html,这是一个由Qt官方提供的完整的QML教程,包含了所有基本知识和高级语法. ...
- 在 Linux 内公网、云服务器搭建一套 K8s 集群
前言 本文讲述如果在 Linux 搭建内/公网 Kubernetes 集群的详细步骤,解决搭建过程中的问题. 准备工作 Linux CentOS 7.x 两台及以上,本文用的 7.6 本文配置默认是在 ...
- JVM的垃圾收集算法
介绍分代收集理论和几种垃圾收集算法的思想及其发展过程. 分代收集理论 当前商业虚拟机的垃圾收集器,大多数都遵循了 "分代收集"(Generational Collection)的理 ...
- 安装Minikube并启动一个Kubernetes环境
安装Minikube并启动一个Kubernetes环境 Minikube 是一种轻量级的Kubernetes 实现,可在本地计算机上创建VM 并部署仅包含一个节点的简单集群.Minikube 可用于L ...
- kali linux 基本渗透测试流程
渗透测试流程 1. 信息收集阶段 网络拓扑结构分析 使用nmap扫描目标网络,获取目标主机IP地址和开放端口信息 使用whois查询目标域名的注册信息和DNS服务器信息 使用nslookup查询目标域 ...
- 用Abp实现找回密码和密码强制过期策略
@ 目录 重置密码 找回密码 发送验证码 校验验证码 发送重置密码链接 创建接口 密码强制过期策略 改写接口 Vue网页端开发 重置密码页面 忘记密码控件 密码过期提示 项目地址 用户找回密码,确切地 ...
- 【贪心算法】NO134 加油站
134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升 ...
- Spring的Factories机制介绍
Java 的 SPI 机制 Java SpringBoot 加载 yml 配置文件中字典项 Spring的Factories就是Spring版本的Java Spi. Spring Factories的 ...