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的朋友一点学习经验小结
Nov 23 Javascript
jquery ajax同步异步的执行最终解决方案
Apr 26 Javascript
jQuery自定义事件的简单实现代码
Jan 27 Javascript
JQuery实现左右滚动菜单特效
Sep 28 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
详细讲解vue2+vuex+axios
May 27 Javascript
详解angular中的作用域及继承
May 31 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
Jul 23 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
微信小程序云开发如何使用云函数生成二维码
May 18 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
Dec 16 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
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 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
php实现用户登陆简单实例
2017/04/04 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
python线程锁(thread)学习示例
2013/12/04 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python中查看文件名和文件路径
2017/03/31 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
关于python中的xpath解析定位
2020/03/06 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
大学生会计职业生涯规划范文
2014/02/28 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
铅球加油稿100字
2014/09/26 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书