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 相关文章推荐
ExtJS 2.0实用简明教程 之Border区域布局
Apr 29 Javascript
js客户端快捷键管理类的较完整实现和应用
Jun 08 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
Aug 10 Javascript
简单解析JavaScript中的__proto__属性
May 10 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 Javascript
bootstrap PrintThis打印插件使用详解
Feb 20 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
Jul 25 Javascript
使用vscode快速建立vue模板过程详解
Oct 10 Javascript
js实现整体缩放页面适配移动端
Mar 31 Javascript
简单了解前端渐进式框架VUE
Jul 20 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 Javascript
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
PHP正则获取页面所有图片地址
2016/03/23 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
setTimeout学习小结
2017/02/08 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
python3实现弹弹球小游戏
2019/11/25 Python
python爬虫可以爬什么
2020/06/16 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
应届生服装设计自我评价
2013/09/20 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
施工员岗位职责
2014/03/16 职场文书
2014年清明节寄语
2014/04/03 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
介绍信样本
2015/01/31 职场文书
孔繁森观后感
2015/06/10 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
Python字符串的转义字符
2022/04/07 Python