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 相关文章推荐
js类式继承的具体实现方法
Dec 31 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
Feb 04 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
Apr 04 Javascript
JavaScript使用focus()设置焦点失败的解决方法
Sep 03 Javascript
Javascript实现禁止输入中文或英文的例子
Dec 09 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
Dec 02 Javascript
JavaScript实现经典排序算法之冒泡排序
Dec 28 Javascript
jquery实现企业定位式导航效果
Jan 01 jQuery
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 Javascript
JavaScript面向对象核心知识与概念归纳整理
May 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
供货协议书范本
2014/04/22 职场文书
文明村镇申报材料
2014/05/06 职场文书
工作求职自荐信
2014/06/13 职场文书
导游词怎么写
2015/02/04 职场文书
爱晚亭导游词
2015/02/09 职场文书
远程教育学习心得体会
2016/01/23 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP