element ui table(表格)实现点击一行展开功能


Posted in Javascript onDecember 04, 2018

前言

element ui是一个非常不错的vue的UI框架,element对table进行了封装,简化了vue对表格的渲染。

element ui表格中有一个功能是展开行,在2.0版本官网例子中,只可以点击右箭头可以展开,我们的很多需求是点击某一行展开

那是不是无法实现呢?其实,借助element ui的一些属性,轻松实现点击某行展开,我们还是用2.0.9版本官网的例子,

element ui table(表格)实现点击一行展开功能 

对齐改造,使之可以做到这点

<template>
 <el-table
   :data="tableData5"
   style="width: 100%"
   row-key="id"
   :expand-row-keys="expands"
   @row-click="rowClick">
  <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.name }}</span>
     </el-form-item>
     <el-form-item label="所属店铺">
      <span>{{ props.row.shop }}</span>
     </el-form-item>
     <el-form-item label="商品 ID">
      <span>{{ props.row.id }}</span>
     </el-form-item>
     <el-form-item label="店铺 ID">
      <span>{{ props.row.shopId }}</span>
     </el-form-item>
     <el-form-item label="商品分类">
      <span>{{ props.row.category }}</span>
     </el-form-item>
     <el-form-item label="店铺地址">
      <span>{{ props.row.address }}</span>
     </el-form-item>
     <el-form-item label="商品描述">
      <span>{{ props.row.desc }}</span>
     </el-form-item>
    </el-form>
   </template>
  </el-table-column>
  <el-table-column
    label="商品 ID"
    prop="id">
  </el-table-column>
  <el-table-column
    label="商品名称"
    prop="name">
  </el-table-column>
  <el-table-column
    label="描述"
    prop="desc">
  </el-table-column>
 </el-table>
</template>
 
<style>
 .demo-table-expand {
  font-size: 0;
 }
 .demo-table-expand label {
  width: 90px;
  color: #99a9bf;
 }
 .demo-table-expand .el-form-item {
  margin-right: 0;
  margin-bottom: 0;
  width: 50%;
 }
</style>
 
<script>
 export default {
  data() {
   return {
    tableData5: [{
     id: '12987122',
     name: '好滋好味鸡蛋仔',
     category: '江浙小吃、小吃零食',
     desc: '荷兰优质淡奶,奶香浓而不腻',
     address: '上海市普陀区真北路',
     shop: '王小虎夫妻店',
     shopId: '10333'
    }, {
     id: '12987123',
     name: '好滋好味鸡蛋仔',
     category: '江浙小吃、小吃零食',
     desc: '荷兰优质淡奶,奶香浓而不腻',
     address: '上海市普陀区真北路',
     shop: '王小虎夫妻店',
     shopId: '10333'
    }, {
     id: '12987125',
     name: '好滋好味鸡蛋仔',
     category: '江浙小吃、小吃零食',
     desc: '荷兰优质淡奶,奶香浓而不腻',
     address: '上海市普陀区真北路',
     shop: '王小虎夫妻店',
     shopId: '10333'
    }, {
     id: '12987126',
     name: '好滋好味鸡蛋仔',
     category: '江浙小吃、小吃零食',
     desc: '荷兰优质淡奶,奶香浓而不腻',
     address: '上海市普陀区真北路',
     shop: '王小虎夫妻店',
     shopId: '10333'
    }],
 
 
    // 要展开的行,数值的元素是row的key值
    expands: []
   }
  },
  methods:{
   //在<table>里,我们已经设置row的key值设置为每行数据id:row-key="id"
   rowClick(row, event, column) {
    Array.prototype.remove = function (val) {
     let index = this.indexOf(val);
     if (index > -1) {
      this.splice(index, 1);
     }
    };
 
    if (this.expands.indexOf(row.id) < 0) {
     this.expands.push(row.id);
    } else {
     this.expands.remove(row.id);
    }
 
   }
  }
 
 }
</script>

这个例子可以直接复制运行起来,一点问题都没有,上面的代码可以实现点击某行展开,对比官网的例子,我们在table添加了

row-key="id"
:expand-row-keys="expands"
@row-click="rowClick"

这里有2个问题:

1.数据中每项没有一个唯一标示怎么办?

2.实现展开当前行的时候,其他行都能收起来

这2个问题也很简单。第2个问题,在rowClick函数给expands添加之前,先清空这个数组。

if (this.expands.indexOf(row.id) < 0) {
     this.expands = []
     this.expands.push(row.id);
    } else {
     this.expands.remove(row.id);
    }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript 获取所有id中包含某关键字的控件的实现代码
Nov 25 Javascript
理解JavaScript中的对象 推荐
Jan 09 Javascript
jQuery EasyUI API 中文文档 - Form表单
Oct 06 Javascript
JavaScript Promise启示录
Aug 12 Javascript
js闭包实例汇总
Nov 09 Javascript
JavaScript实现在页面间传值的方法
Apr 07 Javascript
Easyui Treegrid改变默认图标的方法
Apr 29 Javascript
详解如何在vue中使用sass
Jun 21 Javascript
详解如何用webpack打包一个网站应用项目
Jul 12 Javascript
JavaScript设计模式之装饰者模式实例详解
Jan 17 Javascript
JS正则表达式封装与使用操作示例
May 15 Javascript
jQuery实现简易QQ聊天框
Feb 10 jQuery
elementUI中Table表格问题的解决方法
Dec 04 #Javascript
zepto.js 实时监听输入框的方法
Dec 04 #Javascript
vue 之 css module的使用方法
Dec 04 #Javascript
Vue源码解析之数组变异的实现
Dec 04 #Javascript
小程序指纹验证的实现代码
Dec 04 #Javascript
js实现下拉框二级联动
Dec 04 #Javascript
解决JS表单验证只有第一个IF起作用的问题
Dec 04 #Javascript
You might like
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
python实现树形打印目录结构
2018/03/29 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
Hotels.com印度:酒店预订
2019/05/11 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
主持人婚宴答谢词
2014/01/28 职场文书
运输服务质量承诺书
2014/03/27 职场文书
小学校长个人总结
2015/03/03 职场文书
java实现web实时消息推送的七种方案
2022/07/23 Java/Android