开发中是否会遇见在一个页面中加载的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. 最近写了一个demo,想看看java和go语言是怎么写的

    最近写了一个demo:demo的github地址 一. 简单介绍 1. Server端 它是一个WebApi服务,把它当成一个黑盒就行了. 2. MiddleServer端 是重点,它是一个WebAp ...

  2. os模块的使用方法详解

    os模块 os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口:即os模块提供了非常丰富的方法用来处理文件和目录. 使用的时候需要导入该模块:import os 常用方法如下: 方法名 作用 ...

  3. 详解DDD:如何避免写流水账代码?

    在日常工作中我观察到,面对老系统重构和迁移场景,有大量代码属于流水账代码,通常能看到开发在对外的API接口里直接写业务逻辑代码,或者在一个服务里大量的堆接口,导致业务逻辑实际无法收敛,接口复用性比较差 ...

  4. 最强分布式搜索引擎——ElasticSearch

    最强分布式搜索引擎--ElasticSearch 本篇我们将会介绍到一种特殊的类似数据库存储机制的搜索引擎工具--ES elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以 ...

  5. Django笔记六之外键ForeignKey介绍

    这一篇笔记介绍 Django 系统 model 的外键处理,ForeignKey 以及相应的处理方法. 这是一种一对多的字段类型,表示两张表之间的关联关系. 本篇笔记的目录如下: on_delete ...

  6. 选择KV数据库最重要的是什么

    本文分享自华为云社区<选择KV数据库最重要的是什么?>,作者:GaussDB 数据库 . 经常有客户提到KV数据库,但却偏偏"不要Redis".比如有个做安全威胁分析平 ...

  7. jmeter分布式测试安装部署步骤

    一.下载linux版本的jdk ----注:下载的jdk和jmeter要与window的jdk和jmeter一致 下载地址:https://www.oracle.com/java/technologi ...

  8. [大数据]sqoop安装与运用

    1 文由 项目使用场景:OLTP Oracle 数据导入到 OLAP HIVE 2 Sqoop简述 Apache Sqoop(TM) 是一款开源的ETL工具,设计用于在 Apache Hadoop和结 ...

  9. [大数据]ETL之增量数据抽取(CDC)

    关于:转载/知识产权 本文遵循 GPL开源协议,如若转载: 1 请发邮件至博主,以作申请声明. 2 请于引用文章的显著处注明来源([大数据]ETL之增量数据抽取(CDC) - https://www. ...

  10. [MAUI 项目实战] 手势控制音乐播放器(四):圆形进度条

    @ 目录 关于图形绘制 创建自定义控件 使用控件 创建专辑封面 项目地址 我们将绘制一个圆形的音乐播放控件,它包含一个圆形的进度条.专辑页面和播放按钮. 关于图形绘制 使用MAUI的绘制功能,需要Mi ...