当前位置:首页 > VUE

vue列表展开实现

2026-02-18 05:22:01VUE

Vue列表展开实现方法

使用v-if控制显示隐藏

通过v-if指令动态控制列表项的显示与隐藏,结合点击事件切换状态。

<template>
  <div>
    <button @click="toggleList">展开/收起列表</button>
    <ul v-if="isExpanded">
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isExpanded: false,
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    }
  },
  methods: {
    toggleList() {
      this.isExpanded = !this.isExpanded
    }
  }
}
</script>

使用transition添加动画效果

为展开收起过程添加平滑的过渡动画。

<template>
  <div>
    <button @click="toggleList">展开/收起</button>
    <transition name="fade">
      <ul v-if="isExpanded">
        <li v-for="item in items" :key="item.id">{{ item.name }}</li>
      </ul>
    </transition>
  </div>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

动态高度过渡

通过max-height实现高度变化的过渡效果。

<template>
  <div>
    <button @click="toggleList">展开/收起</button>
    <div class="list-container" :style="{ maxHeight: isExpanded ? '500px' : '0' }">
      <ul>
        <li v-for="item in items" :key="item.id">{{ item.name }}</li>
      </ul>
    </div>
  </div>
</template>

<style>
.list-container {
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}
</style>

使用第三方组件

对于更复杂的需求,可以使用现成的UI组件库如Element UI的Collapse组件。

<template>
  <el-collapse v-model="activeNames">
    <el-collapse-item title="列表标题" name="1">
      <ul>
        <li v-for="item in items" :key="item.id">{{ item.name }}</li>
      </ul>
    </el-collapse-item>
  </el-collapse>
</template>

<script>
export default {
  data() {
    return {
      activeNames: ['1'],
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    }
  }
}
</script>

多级嵌套展开

实现多级列表的展开功能,通常需要递归组件。

<template>
  <div>
    <ul>
      <li v-for="item in items" :key="item.id">
        <div @click="toggleItem(item)">
          {{ item.name }}
          <span v-if="item.children">[{{ item.expanded ? '-' : '+' }}]</span>
        </div>
        <ul v-if="item.expanded && item.children">
          <li v-for="child in item.children" :key="child.id">{{ child.name }}</li>
        </ul>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        {
          id: 1,
          name: 'Parent 1',
          expanded: false,
          children: [
            { id: 11, name: 'Child 1' }
          ]
        }
      ]
    }
  },
  methods: {
    toggleItem(item) {
      if (item.children) {
        item.expanded = !item.expanded
      }
    }
  }
}
</script>

vue列表展开实现

标签: 列表vue
分享给朋友:

相关文章

vue实现发表

vue实现发表

Vue 实现发表功能 在 Vue 中实现发表功能通常涉及表单处理、数据绑定和网络请求。以下是实现步骤和代码示例: 表单设计与数据绑定 创建一个表单用于输入发表内容,使用 v-model 进行数据双向…

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vu…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…

vue实现缩放

vue实现缩放

Vue 实现缩放的方法 在 Vue 中实现缩放功能可以通过多种方式完成,以下是一些常见的方法: 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template…

vue 实现表单

vue 实现表单

Vue 表单实现方法 Vue.js 提供了多种方式实现表单,包括双向数据绑定、表单验证和动态表单生成。以下是常见的实现方法: 基础表单绑定 使用 v-model 指令实现表单元素与数据的双向绑定:…