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 相关文章推荐
扩展jQuery 键盘事件的几个基本方法
Oct 30 Javascript
javascript怎么禁用浏览器后退按钮
Mar 27 Javascript
JS循环遍历JSON数据的方法
Jul 08 Javascript
jQuery中:contains选择器用法实例
Dec 30 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
Mar 06 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
Oct 27 Javascript
javascript数据结构之串的概念与用法分析
Apr 12 Javascript
vue2.X组件学习心得(新手必看篇)
Jul 05 Javascript
vue中v-model动态生成的实例详解
Oct 27 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 Javascript
vue 需求 data中的数据之间的调用操作
Aug 05 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
Aug 13 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伪静态写法附代码
2008/06/20 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
Vue实现购物车功能
2017/04/27 Javascript
js随机生成一个验证码
2017/06/01 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
ant design实现圈选功能
2019/12/17 Javascript
python多重继承实例
2014/10/11 Python
Django发送html邮件的方法
2015/05/26 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
Django实现内容缓存实例方法
2020/06/30 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
仓管员岗位职责范文
2013/11/08 职场文书
捐款倡议书
2014/04/14 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
承诺书格式范文
2014/06/03 职场文书
条幅标语大全
2014/06/20 职场文书
高中生逃课检讨书
2014/10/10 职场文书
公司开除员工通知
2015/04/22 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js