elemnet-ui组件库大家应该不陌生,在展示多条结构类似的数据方面,el-table可谓扛把子,不仅可以把数据展示的整齐,还支持排序、筛选或其他自定义操作。那么,除了上述的基本功能外,你还遇到过哪些花样的需求呢?下面我们一起盘点下吧~

1 基本使用

如果熟悉基本操作,可直接看下面第二小节。

<template>
<el-table:data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期"></el-table-column>
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="address"label="地址"></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'},
{date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄'},
{date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄'},
{date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄'}
]
}
}
}
</script>

2 表格数据排序,首行加序号

2.1 当前页排序

设置type属性为index即可显示从 1 开始的索引号。注意:此时如果表格有分页,当前序号只是对当前页的排序。而不是全部数据。每次翻页,序号都会从1开始。

2.2 全部数据排序

<el-table-column fixed label="序号"width="50" align="center">
<template scope="scope">
<span>{{scope.$index+(page - 1) * limit + 1}} </span>
</template>
</el-table-column>

scope.$index:当前行在当前页的序号

page:当前页数

limit:一页显示多少行

3 表格中显示图片

<el-table-column prop="photo" label="照片">
<template slot-scope="scope">
<img :src="scope.row.photo" width="40" height="40" alt=""/>
</template>
</el-table-column>

4 表格中添加开关(el-switch)

<el-table-column property="state" label="状态">
<template slot-scope="scope">
<el-switch v-model="scope.row.state"></el-switch>
</template>
</el-table-column>

5 表格中添加音频播放

通过上面2个实例,我们觉得scope很神奇,什么都可以放。此时如果想添加音频,是否可以直接播放呢?我们先了解一下几种常见的音频格式以及播放方式。

1 .mp3格式,H5的<audio>标签可直接播放。

2 .wav格式,该格式没办法直接播,只能先下载到本地,通过本地播放器播放。

鉴于以上情况,我们拿到音频数据后,需要先判断一下音频格式,再为其选用正确处理方式。

this.tableData.forEach((item) => {
// 接口返回值中,rowRecording字段 表示音频
let rowRecording = item.recording;
if (rowRecording === '') { // 字段值为空,页面显示‘暂无录音’
this.$set(item, 'showAudio', 0);
} else {
let arr = rowRecording.split('.'); // 拿到音频格式后缀
let recordTypeName = arr[arr.length - 1];
if (recordTypeName === 'mp3') { // mp3格式,直接播放
this.$set(item, 'showAudio', 1);
} else if (recordTypeName === 'wav') { // wav格式,提示下载
this.$set(item, 'showAudio', 2);
}
}
});
<el-table-column prop="recording" label="录音" width="120">
<template slot-scope="scope">
<div style="width: 100%;height: 32px;" v-if="scope.row.showAudio===1">
<audio controls style="width:100%;height: 100%;">
<source :src="scope.row.recording" type="audio/wav">
</audio>
</div>
<div v-if="scope.row.showAudio===2">
<a :href="scope.row.recording">点击下载播放</a>
</div>
<div v-if="scope.row.showAudio===0">暂无录音</div>
</template>
</el-table-column>

以上3种需求的实现效果如下:

6 动态生成多级表头

我们知道el-table支持多级表头,效果如下图,顺便我们讨论下多级表头时,表格是如何渲染的。下图中数字代表层级,如果此时我说不管表头有多少级,每一级表头只需要关心自己的直接子元素,以此类推,直到最后一级没有子元素的表头去匹配数据,整个表格就可以正确渲染,你觉得对吗?

也就是说,下图中,第一级表头“配送信息”只需正确找到自己的两个孩子“姓名”和“地址”....., 到了没有子元素的3-1“省份”,那它就负责去匹配数据。

原理我们已经理解,但是官方示例中表头都是在页面里写死的固定数据。实际应用中,很多情况下表头是是接口返回的。那此时,表头需要动态生成,且要保证层级正确,更重要的是,数据渲染要准确。

我们将直接层级关系的表头比喻成父子,那么将表头数据设计成相应的嵌套结构。通过双层for循环,多级表头是不是就可以正确渲染了呢?然后让最后一级表头去匹配数据,数据也就可以正确展示了吧?试一下吧~假设接口返回的多级动态表头数据结构如下:

tableHeader: [
{'label': '日期','prop': 'date'},
{
'label': '信息',
'prop': '信息',
children: [
{prop:"name",label:"姓名"},
{prop:"province",label:"省份"},
{prop:"city",label:"市区"},
{prop:"zip",label:"邮编"}
]
}
]

相信你已经看出谁有子元素了,下面看如何通过双层for循环渲染多级表头。

<el-table :data="tableList">
<el-table-column
v-for='item in tableHeader' :label="item.label"
:prop='item.prop' :key='item.prop'>
<template v-if='item.children && item.children.length'>
<el-table-column
v-for="item1 in item.children" :label="item1.label"
:prop='item1.prop':key='item1.prop'>
</el-table-column>
</template>
</el-table-column>
</el-table>

我们再给一组表格数据:

tableList: [
{
"date": "2020-06-01",
"name": "王小虎",
"province": "上海",
"city": "普陀区",
"zip": 200333
}
]

最终效果如下,完成!

欢迎大家关注我的公粽号,文章更早、更全,扫下面二维码或微信搜“Lemoncool” ,期待您的关注~

el-table 表格加图片、加音频、加序号、多级动态表头的更多相关文章

  1. el-table的花样需求---表格加图片、加音频、加序号、多级动态表头

    elemnet-ui组件库大家应该不陌生,在展示多条结构类似的数据方面,el-table可谓扛把子,不仅可以把数据展示的整齐,还支持排序.筛选或其他自定义操作.那么,除了上述的基本功能外,你还遇到过哪 ...

  2. Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"

    Html Table用JS导出excel格式问题 我在网上找的JS把HTML Tabel导出成EXCEL.但是如果Table里的数字内容为0开的的导成Excel后会自动删除0,我想以text的格式写入 ...

  3. asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL

    代码: /// <summary> /// HTML Table表格数据(html)导出EXCEL /// </summary> /// <param name=&quo ...

  4. Bootstrap Table表格一直加载(load)不了数据-解决办法

    bootstrap-table是一个基于Bootstrap风格的强大的表格插件神器,官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/ 这里列出遇到的一 ...

  5. 自设table表格,获取内容,并经弹出框的url传参,获取结果显示在弹出框,并加载合计

    table表格,选择框 form id="editForm1"> <table class="table_form"> <td > ...

  6. layui table动态表头 改变表格头部 重新加载表格

    改变头部原理: 删除原来表格, 重新建立DOM元素, 重新加载table,实现表头改变 明白了原理, 我相信大家都能写出来了, table.reload(ID, options)目前好像还不支持con ...

  7. 图片,音频资源预加载和文档dom加载

    在项目中遇到一个问题,ajax请求音频资源,然后动态的插入到文档中,其中.原生的音频外观实在太丑了,而且每个浏览器的样式都不一样,采取了一个audio插件. 就遇到一个问题,请求后的直接调用插件的话, ...

  8. jquery实现表格导入到Excel(加图片)

      话不多说直接上代码 第一步:导入jquery的插件https://github.com/rainabba/jquery-table2excel HTML部分: 第二步:添加一个按钮 <but ...

  9. JS怎样实现图片的懒加载以及jquery.lazyload.js的使用

    在项目中有时候会用到图片的延迟加载,那么延迟加载的好处是啥呢? 我觉得主要包括两点吧,第一是在包含很多大图片长页面中延迟加载图片可以加快页面加载速度:第二是帮助降低服务器负担. 下面介绍一下常用的延迟 ...

随机推荐

  1. 聚类算法——DBSCAN算法原理及公式

    聚类的定义 聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小.聚类算法是无监督的算法. 常见的相似度计算方法 闵可夫斯基距离M ...

  2. SpringBoot切面Aop的demo简单讲解

    前言 本篇文章主要介绍的是SpringBoot切面Aop的demo简单讲解. SpringBoot Aop 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 切面(Aop) 一.概 ...

  3. xctf-misc 新手区 wp

    目录 this_is_flag pdf SimpalRAR ext3 stegano this_is_flag Most flags are in the form flag{xxx}, for ex ...

  4. VMware如何克隆一个虚拟机

    如何在Vmware克隆一个虚拟机,并修改哪些配置. 克隆虚拟机步骤 其中模板虚拟机的安装部署可参见:「VMware安装Linux CentOS 7.7系统」 找到克隆的模板机,并选择克隆. 进入克隆虚 ...

  5. CF918C The Monster

    题目链接:http://codeforces.com/contest/918/problem/C 知识点: 贪心 解题思路: 枚举起点(当起点就是\(')'\)时直接跳过)并在此基础上遍历字符串,用一 ...

  6. wordpress中文章发布时间不显示?用get_the_date代替the_date

    今天发现,在主题中部分地方使用the_date函数来显示文章发布的时间时,竟然发生不显示时间的情况,再仔细看了一下这些文章,有些都是经过几次修改和保存的,可能是由于the_date只是显示文章第一次发 ...

  7. Python面向对象的特征跟私有属性

     面向对象的三大特征 继成.封装.多态: 继承:一个类可以继承一个或多个类,被继承的类叫做父类,继承的类叫做子类 封装:将数据和方法放在了一个类中就构成了封装 多态:指的一类事物有多重形态,一个抽象类 ...

  8. [Python番外]001.用Sublime开发Python

    用Sublime开发Python 准备 安装Package Control插件 安装Python插件 Python环境配置 修改快捷键 准备 安装Python 详见 Python准备 下载Sublim ...

  9. Python 每日一练(7)

    引言 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的6个练习差不多,就是把xls中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天 ...

  10. Python 每日一练(4)

    引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...