vue列表单项展开收缩功能之this.$refs

首先看一下效果图

展开效果–看红框区域

vue列表单项展开收缩功能之this.$refs_第1张图片

收缩效果–看红框区域

vue列表单项展开收缩功能之this.$refs_第2张图片

接下来看代码逻辑

template部分:已去除与本文不相关的功能代码

 
  • <div class="audio-name"> <div class="img-l"> <span class="img-l-num">{{index+1}}span> <span class="img-l-name">{{item.subName}}span> div> <div class="img-r" @click="showHide(index)" ref="arrow"> <i class="iconfont">i> div> div> <div class="audio-body" ref="child"> <div class="body-l"> <p class="body-l-num body-l-num-video"> <i class="iconfont">i> p> <span class="body-l-name">{{item.fileName}}span> div> <div class="body-r"> <i class="iconfont" @click="deletCourseSub(item.id)">i> div> div> li>
  • js部分:已去除与本文不相关的功能代码

    data() {
    	return {
    		courseSubList: [], // 课程正文列表
    	}
    },
    methods: {
        showHide(index) {
          if (this.$refs.child[index].style.display === 'none') {
            this.$refs.child[index].style.display = 'flex'
            this.$refs.arrow[index].style.transform = 'rotateX(0deg)'
          } else {
            this.$refs.child[index].style.display = 'none'
            this.$refs.arrow[index].style.transform = 'rotateX(180deg)'
          }
        },
        deletCourseSub(id) {
    	    // 功能代码省略
        }
    }
    

    分析过程:

    • 分别给展开折叠的箭头加ref="arrow"属性;
    • 分别给列表单项内容区最外层标签即本文的class="audio-body"的标签加ref=“child”;
    • 再给箭头标签区域加个showHide(index)事件;
    • 最后通过对应的index利用vue的ref属性改变对应的列表单项展开折叠;

    结束语:如果本文的思路能给同学们提供些许帮助,那将是一件多么让人高兴的事啊!

    你可能感兴趣的:(vue)