使用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 相关文章推荐
Array.prototype 的泛型应用分析
Apr 30 Javascript
javascript模块化是什么及其优缺点介绍
Sep 02 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
May 11 Javascript
原生JS实现响应式瀑布流布局
Apr 02 Javascript
javascript动态添加checkbox复选框的方法
Dec 23 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
Oct 29 Javascript
js尾调用优化的实现
May 23 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
Aug 27 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
Nov 05 Javascript
Nest.js环境变量配置与序列化详解
Feb 21 Javascript
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缓冲 output_buffering的使用详解
2013/06/13 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
详解Python中heapq模块的用法
2016/06/28 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
Python pymsql模块的使用
2020/09/07 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
元旦晚会邀请函
2014/02/01 职场文书
公司司机岗位职责
2014/02/07 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
教师自我剖析材料
2014/09/29 职场文书
小学教师师德整改措施
2014/09/29 职场文书
优秀创业计划书分享
2019/07/19 职场文书
Python matplotlib绘制雷达图
2022/04/13 Python