开发中是否会遇见在一个页面中加载的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实现动态列的更多相关文章

  1. element ui table表头动态筛选条件

    本文主要实现:根据el-table表格数据自动生成表头筛选条件的方法,可根据表格数据动态调整. el-table表格的表头增加筛选功能,大家平时都是怎么实现的呢?先看看官方文档的例子: 1 <t ...

  2. element UI table 过滤 筛选问题

    一.问提描述    使用elementUI table 官方筛选案例,发现筛选不是服务器端筛选,而是浏览器端对每一页进行单独筛选. 如何在服务器端筛选? 二.查询Element UI 官网table组 ...

  3. Vue+element ui table 导出到excel

    需求: Vue+element UI table下的根据搜索条件导出当前所有数据 参考: https://blog.csdn.net/u010427666/article/details/792081 ...

  4. Element UI table组件源码分析

    本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...

  5. VUE -- 对 Element UI table中数据进行二次处理

    时间——日期 后台经常给我们返回的是 时间戳 (例如:1535620671) 这时候我们页面展现的时候需要将时间戳转换为我们要的格式 例如 (YYYY-MM-DD HH:mm:ss) 如果是在Elem ...

  6. Element UI table参数中的selectable的使用

    Element UI table参数中的selectable的使用中遇到的坑:页面: <el-table-column :selectable='selectable' type="s ...

  7. vue+element ui 的tab 动态增减,切换时提示用户是否切换

    前言:工作中用到 vue+element ui 的前端框架,动态添加 Tab,删除 Tab,切换 Tab 时提示用户是否切换等,发现 element ui  有一个 bug,这里记录一下如何实现.转载 ...

  8. element ui table(表格)点击一行展开

    element ui是一个非常不错的vue的UI框架,element对table进行了封装,简化了vue对表格的渲染. element ui表格中有一个功能是展开行,在2.0版本官网例子中,只可以点击 ...

  9. 上传图片组件封装 element ui

    // element ui 文档地址: http://element.eleme.io/#/zh-CN <template> <div> <div class=" ...

  10. element ui table 导出excel表格

    https://blog.csdn.net/u010427666/article/details/79208145 vue2.0 + element UI 中 el-table 数据导出Excel1. ...

随机推荐

  1. Java 2023年接地气的中高级面试题一(附答案)

    直入主题: Q1:为什么要用分布式锁? 在分布式系统中,多个进程或线程可能会同时访问共享资源,这可能会导致数据不一致.并发性问题.性能下降等问题.为了解决这些问题,我们通常会使用分布式锁来协调多个进程 ...

  2. fluter usage---->动态更换Theme

    应用中切换深色主题和暗色主题是比较常见的操作,今天我们就来学习一下Flutter中动态的切换主题. Simple Theme import 'package:flutter/material.dart ...

  3. 记一次 .NET 某设备监控系统 死锁分析

    一:背景 1. 讲故事 上周看了一位训练营朋友的dump,据朋友说他的程序卡死了,看完之后发现是一例经典的死锁问题,蛮有意思,这个案例算是学习 .NET高级调试 入门级的案例,这里和大家分享一下. 二 ...

  4. Linux磁盘LVM根目录扩容

    LVM 的基本概念 物理卷 Physical Volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file).物理卷包括一个特殊的 hea ...

  5. python入门教程之二十三Python3 MySQL 数据库连接 - PyMySQL 驱动

    MySQL 是最流行的关系型数据库管理系统,如果你不熟悉 MySQL,可以阅读我们的 MySQL 教程. 本章节我们为大家介绍使用 mysql-connector 来连接使用 MySQL, mysql ...

  6. [Linux]监控外部用户登录及外部主机连接情况

    1 外部用户/外部主机 /var/log 在CentOS系统上,用户登录历史存储在以下这些文件中: /var/log/wtmp 用于存储系统连接历史记录被last工具用来记录最后登录的用户的列表 /v ...

  7. Linux(三)磁盘管理

    Linux磁盘管理 Linux中的tree工具 tree可以查看目录的树形结构,前提是需要自行安装 yum install tree -y [root@hadoop100 ~]# tree ./ ./ ...

  8. Sentinel实战

    一.Sentinel简介 Sentinel是阿里开源的面向服务流量治理的框架,官方原文是Sentinel 是面向分布式.多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由.流量控制.流 ...

  9. 从 1 秒到 10 毫秒!在 APISIX 中减少 Prometheus 请求阻塞

    本文介绍了 Prometheus 插件造成长尾请求现象的原因,以及如何解决这个问题. 作者屠正松,Apache APISIX PMC Member. 原文链接 现象 在 APISIX 社区中,曾有部分 ...

  10. devops-5:从0开始构建一条完成的CI CD流水线

    从0开始构建一条完成的CI CD流水线 前文中已经讲述了静态.动态增加agent节点,以动态的k8s cloud为例,下面就以Maven构建Java程序为例,开始构建出一条完整的CI CD流水线. 实 ...