使用element-ui table expand展开行实现手风琴效果


Posted in Javascript onMarch 15, 2019

问题讲解:

在使用vue版本的ElementUI中的table功能的时候还是遇到了一些问题,可以说饿了么团队在这个UI框架的文档撰写已经非常不错了,不过还是有一些方法乍一看让人摸不着头脑,有些table的常用功能示例代码提供的不是非常详细,所以这次针对这个可展开表格实现手风琴效果写一篇博客探讨一下。

先展示一下ElementUI官方提供的示例代码效果图

使用element-ui table expand展开行实现手风琴效果

可以看到官方代码中在这边没有让这个可展开table自动折叠的功能,我点击了别的标签页后上次点击的行仍旧处在一个展开的状态,而且操控的方式也只能点击到左上角的小箭头才可以控制行的展开状态,体验不是特别好,可以说有点糟糕了,但是我后来在后面的文档中发现The methods 里面有写到一个方法叫toggleRowExpansion,这个方法应该是官方本意上想让我们来自由控制展开状态的,从传递的两个参数来看,一个是row(当前点击的行id),另一个是expended(行展开状态,boolean值),看上去有理有据,但是就是不知道怎么用,因为我始终无法获取到expended这个参数的值,有点气,所以这次我们用另一种方式来实现这个功能。

代码实现:

核心是 row-key、expand-row-keys属性

特别要注意的是row-key传入的是一个Function(row),而expand-row-keys传入的是一个数组,元素的值是要展开的row的key。

row-key这个属性是获取当前行号的,expand-row-keys这个属性是获取到展开的行号的,所以前者为一个单值,而后者是一个数组形式,所以这个属性也同样适用于表格多选列这种情况。

<el-table
        :data="compony"
        style="width: 100%;margin-top:80px"
        :row-key="getRowKeys"
        :expand-row-keys="expands"
        @current-change="toggleRowExpansion">
        <el-table-column type="expand">
         <template slot-scope="props">
          <el-form label-position="left" inline class="demo-table-expand">
           <el-form-item label="公司名称">
            <span>{{ props.row.com_name }}</span>
           </el-form-item>
           <el-form-item label="下属电厂ID">
            <span>{{ props.row.fct_id }}</span>
           </el-form-item>
           <el-form-item label="电厂名称">
            <span>{{ props.row.fct_name }}</span>
           </el-form-item>
           <el-form-item label="用户名">
            <span>{{ props.row.user_name }}</span>
           </el-form-item>
           <el-form-item label="密码">
            <span>{{ props.row.password }}</span>
           </el-form-item>
           <el-form-item label="加入时间">
            <span>{{ props.row.join_time | formatDate}}</span>
           </el-form-item>
           <el-form-item label="离开时间">
            <span>{{ props.row.leave_time }}</span>
           </el-form-item>
          </el-form>
         </template>
        </el-table-column>
        <el-table-column
         label="公司 ID"
         prop="com_id">
        </el-table-column>
        <el-table-column
         label="公司名称"
         prop="com_name">
        </el-table-column>
        <el-table-column label="操作">
         <template slot-scope="scope">
          <el-button
           size="mini"
           @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
          <el-button
           size="mini"
           type="danger"
           @click="handleDelete(scope.$index, scope.row)">删除</el-button>
         </template>
        </el-table-column>
       </el-table>

这边因为要涉及到我项目最终实现的效果,所以我这里就直接把我的整个table都复制上来了,这边的重点主要是table的各个属性,也就是这个代码段的开头,我们在这里涉及到了一个新的监听事件@current-change="toggleRowExpansion",这个事件表示切换行的时候会有一个触发的事件发生,我们在获取了行id,展开行id之后,还要去data里面定义我们所要用到的数据框架。

data() {
   return {
    compony:[],
    // 获取row的key值
    getRowKeys(row) {
      return row.id;
    },
    form: {},
    // 要展开的行,数值的元素是row的key值
    expands: [],
   }
  },

这边我就展示所需要用到的数据布置了,通过getRowKeys方法获取到row的行id值,定义一个expands展开行的数组,最后是业务逻辑代码

data() {
   return {
    compony:[],
    // 获取row的key值
    getRowKeys(row) {
      return row.id;
    },
    form: {},
    // 要展开的行,数值的元素是row的key值
    expands: [],
   }
  },

因为我们现在只要求展开一行,所以每次把需要展开行的id储存进数组时要先清空一次数组,然后在push进去,最终实现效果图

使用element-ui table expand展开行实现手风琴效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS类库Bindows1.3中的内存释放方式分析
Mar 08 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
Jul 22 Javascript
html页面显示年月日时分秒和星期几的两种方式
Aug 20 Javascript
jquery通过closest选择器修改上级元素的方法
Mar 17 Javascript
简单的jQuery入门指引
Jul 28 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
Sep 24 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
Jul 18 Javascript
使用layui 的layedit定义自己的toolbar方法
Sep 18 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
Oct 26 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 Javascript
vuex的使用和简易实现
Jan 07 Vue.js
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 #Javascript
vue过滤器用法实例分析
Mar 15 #Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
Mar 15 #Javascript
详解vue移动端项目代码拆分记录
Mar 15 #Javascript
小程序自定义单页面、全局导航栏的实现代码
Mar 15 #Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 #Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
Mar 15 #Javascript
You might like
PHP 5.0 Pear安装方法
2006/12/06 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
海量经典的jQuery插件集合
2010/01/12 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
vue绑定的点击事件阻止冒泡的实例
2018/02/08 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
Python实现简单猜数字游戏
2021/02/03 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
this关键字的含义
2015/04/08 面试题
自立自强的名人事例
2014/02/10 职场文书
运动会开幕式主持词
2014/03/28 职场文书
单位绩效考核方案
2014/05/11 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书