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的caller,callee,call,apply
Apr 28 Javascript
JSON 客户端和服务器端的格式转换
Aug 27 Javascript
javscript对象原型的一些看法
Sep 19 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
微信小程序数据分析之自定义分析的实现
Aug 17 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
微信小程序实现的一键复制功能示例
Apr 24 Javascript
JS将时间秒转换成天小时分钟秒的字符串
Jul 10 Javascript
微信小程序实现点击生成随机验证码
Sep 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抓取https的内容的代码
2010/04/06 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
javascript中this指向详解
2016/04/23 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
原生JS实现留言板
2020/03/26 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python基础教程之元组操作使用详解
2014/03/25 Python
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
Python微信公众号开发平台
2018/01/25 Python
Python实现Linux监控的方法
2019/05/16 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
详解Python多线程下的list
2020/07/03 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
医药营销专业个人自荐信
2013/09/29 职场文书
少先队入队活动方案
2014/02/08 职场文书
养成教育经验材料
2014/05/26 职场文书
小学班主任培训方案
2014/06/04 职场文书
寒假安全保证书
2015/02/28 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
教师远程研修感悟
2015/11/18 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis