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 相关文章推荐
在IE中调用javascript打开Excel的代码(downmoon原作)
Apr 02 Javascript
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
详解JavaScript中的表单验证
Jun 16 Javascript
js实现表单检测及表单提示的方法
Aug 14 Javascript
javascript  删除select中的所有option的实例
Sep 17 Javascript
Vue+Vux项目实践完整代码
Nov 30 Javascript
vuejs实现递归树型菜单组件
Jan 13 Javascript
解决vue数组中对象属性变化页面不渲染问题
Aug 09 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 Javascript
node删除、复制文件或文件夹示例代码
Aug 13 Javascript
微信小程序实现签字功能
Dec 23 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 批量替换html标签的实例代码
2013/11/26 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
Vue项目中如何使用Axios封装http请求详解
2019/10/23 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
粗略分析Python中的内存泄漏
2015/04/23 Python
python实现简单爬虫功能的示例
2016/10/24 Python
Python 实现微信防撤回功能
2019/04/29 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
Python selenium自动化测试模型图解
2020/04/15 Python
如何卸载python插件
2020/07/08 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
怎样创建、运行java程序
2014/08/01 面试题
开业庆典邀请函
2014/01/08 职场文书
会议开场欢迎词
2014/01/15 职场文书
个人自我评价和职业目标
2014/01/24 职场文书
捐赠仪式主持词
2014/03/19 职场文书
倡导文明标语
2014/06/16 职场文书
超市开店计划书
2014/09/15 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL
基于redis+lua进行限流的方法
2022/07/23 Redis