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 相关文章推荐
cookie的复制与使用记住用户名实现代码
Nov 04 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
Nov 22 Javascript
深入理解javascript作用域和闭包
Sep 23 Javascript
js简单实现Select互换数据的方法
Aug 17 Javascript
javascript实现简易计算器的代码
May 31 Javascript
jQuery Easyui 下拉树组件combotree
Dec 16 Javascript
canvas绘制万花筒效果(代码分享)
Jan 20 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
Mar 14 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
Jul 08 Javascript
js实现圆形菜单选择器
Dec 03 Javascript
Ajax异步刷新功能及简单案例
Nov 20 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
php定时执行任务设置详解
2015/02/06 PHP
php判断当前操作系统类型
2015/10/28 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
Dom操作之兼容技巧分享
2011/09/20 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
Vue实现双向数据绑定
2017/05/03 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
python将图片文件转换成base64编码的方法
2015/03/14 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
python操作文件的参数整理
2019/06/11 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
手机被没收检讨书
2014/02/22 职场文书
寄语是什么意思
2014/04/10 职场文书
五年级学生评语
2014/04/22 职场文书
学校评语大全
2014/05/06 职场文书
2015年班组长工作总结
2015/04/10 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS