vue-列表下详情的展开与折叠案例


Posted in Javascript onJuly 28, 2020

如下所示:

vue-列表下详情的展开与折叠案例

功能描述

1、默认折叠,点击时展示全部数据

2、点击A项,A展开,之后有两种情况:①再次点击A,A折叠;②点击其他项,如B,这时B展开,A折叠

解决方式

1、给展开折叠图标添加一个样式,显示成动画效果

<div class="arrow" :class="{'open':showDetail === index}"></div>
.arrow{
 position absolute
 width: 0.6rem;
 height: 0.3rem;
 top 2.0rem
 right 0.8rem
 background url(../../../assets/images/icon_up.png) no-repeat
 background-size: 100% 100%
 transition: transform 0.3s
 -webkit-transition: transform 0.3s
 &.open{
 transform : rotate(-180deg)
 }
}

2、详情样式

<transition-group class="expert-detail" tag="div" mode="">
 <div v-for="i in 1" :key="i" class="detail" :ref="`stateopen${index}`" v-show="showDetail===index">
...
 </div>
</transition-group>

3、方法详情

// 展开与折叠
// 分析:
// 1,showDetail默认为-1,第一次任意点击B,当前B对象展开,showDetail=index=n,此时有两种情况:
// 情况1,再次点击B,showDetail===index,B关闭,showDetail=-1
// 情况2,点击B以外的其他对象C,先关闭B,在打开当前对象C
foldAndUnfold(index,item){
 if(this.showDetail===index){//两次点击的对象相同,关闭
 this.showDetail = -1
 }else{//点击的对象不同,先关闭前一对象,再打开当前对象
 this.showDetail = index
 }
}

补充知识: Vue table 点击按钮展开折叠面板

vue 实现的 table 折叠展开功能,由于工作中用到,这里把相应代码整理下,方便自己日后 Copy

1.Html 部分

由基本的 table 表单与折叠栏部分组成

PS:table 上需要加上 ref,以便方法中能够获取到 table 属性

<!-- 注意:el-table 上加一个 ref="table" -->
 <el-table ref="table" :data="list" border style="width: 100%; margin-top:20px; min-height:700px">
  <el-table-column align="center" label="编号">
  <template slot-scope="scope">
   <span>{{ id }}</span>
  </template>
  </el-table-column>
 
  <el-table-column align="center" label="姓名">
  <template slot-scope="scope">
   <span>{{ name }}</span>
  </template>
  </el-table-column>
 
  <el-table-column label="操作" width="300" align="center" prop="operation">
  <template slot-scope="scope">
   <el-button plain @click="toogleExpand(scope.row)">详情</el-button>
  </template>
  </el-table-column>
 
  <!-- 展开部分 -->
  <el-table-column type="expand" width="1">
  <template slot-scope="props">
   <el-form label-position="left" inline class="demo-table-expand">
   <!-- 参数列表 -->
   <el-form-item label="1111" label-width="100%">
    aaa
   </el-form-item>
   </el-form>
 
  </template>
  </el-table-column>
 </el-table>

2. vue 的 JS 部分

<script>
 export default {
  data() {
  return {
   list: [{
   id: '1',
   name: '王小1',
   }, {
   id: '2',
   name: '王小2',
   }, {
   id: '3',
   name: '王小3',
   }, {
   id: '4',
   name: '王小4',
   }]
  }
  },
  
  methods: {
  // 展开行效果
  toogleExpand(row) {
   const $table = this.$refs.table
   // 注意,这里的 this.list 是上面 data 中的 list
   // 通过比对数据与行里的数据,对展开行进行控制,获取对应值
   this.list.map((item) => {
   if (row.id !== item.id) {
    $table.toggleRowExpansion(item, false)
   }
   })
   $table.toggleRowExpansion(row)
  },
  }
 }
 </script>

3.css 部分

这里除了基本的属性外,主要我发现展开栏部分会有空白各自部分,还能拖开,因此加属性把多余部分给隐藏掉

下方有注释

<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: 100%;
 }
 .el-form-item__content {
 width: 100%;
 }
 /* 隐藏上方表格多余部分 */
 .undefined.el-table__expand-column {
 display: none;
 }
 /* 隐藏上方表格多余部分 */
 .el-table_1_column_8 .el-table--border td, .el-table--border th, .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed {
 border-right: 0px solid #ebeef5
 }
</style>

4.效果图

这个效果图是我后面补的,但是功能是以上面来做的

vue-列表下详情的展开与折叠案例

以上这篇vue-列表下详情的展开与折叠案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中巧用“闭包”实现程序的暂停执行功能
Apr 04 Javascript
javascript各种复制代码收集
Sep 20 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
Oct 31 Javascript
javascript中checkbox使用方法简单实例演示
Nov 17 Javascript
Vuex简单入门
Apr 19 Javascript
JavaScript创建对象_动力节点Java学院整理
Jun 27 Javascript
基于JS实现移动端左滑删除功能
Jul 28 Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 Javascript
JavaScript选择排序算法原理与实现方法示例
Aug 06 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
详解Puppeteer前端自动化测试实践
Feb 21 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
Aug 09 Javascript
js 数组当前行添加数据方法详解
Jul 28 #Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
Jul 28 #Javascript
JS代码简洁方式之函数方法详解
Jul 28 #Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
Jul 28 #Javascript
JavaScript前端开发时数值运算的小技巧
Jul 28 #Javascript
js实现全选和全不选
Jul 28 #Javascript
浅谈vue中$bus的使用和涉及到的问题
Jul 28 #Javascript
You might like
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
php 常用的系统函数
2017/02/07 PHP
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
AngularJS实现表单验证功能详解
2017/10/12 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
Python读取实时数据流示例
2019/12/02 Python
python中if嵌套命令实例讲解
2021/02/25 Python
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
纺织工程专业个人求职信范文
2014/01/27 职场文书
民生工程实施方案
2014/03/22 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
高三复习计划
2015/01/19 职场文书
员工手册编写范本
2015/05/14 职场文书
2015年城管个人工作总结
2015/05/15 职场文书