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之锁定表格栏位
Jun 29 Javascript
javascript 用原型继承来实现对象系统
Mar 22 Javascript
Javascript 键盘事件的组合使用实现代码
May 04 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
一个JS的日期格式化算法示例
Jul 31 Javascript
javascript中Math.random()使用详解
Apr 15 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
Aug 03 Javascript
Webpack性能优化 DLL 用法详解
Aug 10 Javascript
electron+vue实现div contenteditable截图功能
Jan 07 Javascript
vue3.0中使用element的完整步骤
Mar 04 Vue.js
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验证信用卡卡号是否正确函数
2015/05/27 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
php实现简易计算器
2020/08/28 PHP
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
jquery等待效果示例
2014/05/01 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
详解python发送各类邮件的主要方法
2016/12/22 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
Shell编程面试题
2016/05/29 面试题
秋季运动会广播稿
2014/02/22 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
家庭教育的心得体会
2014/09/01 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
初中毕业感言300字
2015/07/31 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
银行工作心得体会范文
2016/01/23 职场文书