当前位置:首页 > VUE

vue table实现折叠

2026-01-16 06:06:17VUE

实现折叠表格的基本思路

在Vue中实现表格折叠功能,可以通过动态控制行的显示与隐藏来完成。常见做法是结合v-ifv-show指令,配合数据状态管理来实现。

使用v-show实现简单折叠

通过v-show控制行的显示状态,切换布尔值即可实现折叠效果:

vue table实现折叠

<template>
  <table>
    <tr v-for="(item, index) in data" :key="index">
      <td @click="toggle(index)">{{ item.name }}</td>
      <td v-show="item.expanded">{{ item.detail }}</td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      data: [
        { name: 'Item 1', detail: 'Detail 1', expanded: false },
        { name: 'Item 2', detail: 'Detail 2', expanded: false }
      ]
    }
  },
  methods: {
    toggle(index) {
      this.data[index].expanded = !this.data[index].expanded
    }
  }
}
</script>

嵌套数据的折叠实现

对于多层嵌套结构,需要递归组件或动态渲染:

<template>
  <table>
    <tr v-for="(item, index) in data" :key="index">
      <td @click="toggle(item)">
        {{ item.name }}
      </td>
      <template v-if="item.children && item.expanded">
        <tr v-for="(child, i) in item.children" :key="`child-${i}`">
          <td style="padding-left: 20px">{{ child.name }}</td>
        </tr>
      </template>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      data: [
        {
          name: 'Parent 1',
          expanded: false,
          children: [
            { name: 'Child 1-1' },
            { name: 'Child 1-2' }
          ]
        }
      ]
    }
  },
  methods: {
    toggle(item) {
      item.expanded = !item.expanded
    }
  }
}
</script>

使用第三方组件库

Element UI等流行库提供了现成的展开行功能:

vue table实现折叠

<template>
  <el-table :data="tableData" style="width: 100%">
    <el-table-column type="expand">
      <template #default="props">
        <p>Detail: {{ props.row.detail }}</p>
      </template>
    </el-table-column>
    <el-table-column prop="name" label="Name"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: 'Item 1', detail: 'Detail 1' }
      ]
    }
  }
}
</script>

动画过渡效果

添加Vue的过渡效果使折叠更平滑:

<template>
  <table>
    <tr v-for="(item, index) in data" :key="index">
      <td @click="toggle(index)">{{ item.name }}</td>
      <transition name="fade">
        <td v-if="item.expanded">{{ item.detail }}</td>
      </transition>
    </tr>
  </table>
</template>

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

性能优化建议

对于大型数据集,建议使用虚拟滚动技术。第三方库如vue-virtual-scroller可以配合使用:

<template>
  <RecycleScroller
    class="table"
    :items="data"
    :item-size="50"
    key-field="id"
  >
    <template #default="{ item }">
      <div @click="toggle(item.id)">
        {{ item.name }}
        <div v-if="expandedItems.includes(item.id)">
          {{ item.detail }}
        </div>
      </div>
    </template>
  </RecycleScroller>
</template>

标签: vuetable
分享给朋友:

相关文章

vue实现tablegrid

vue实现tablegrid

Vue 实现 TableGrid 的方法 使用 Element UI 的 Table 组件 Element UI 提供了强大的 Table 组件,可以快速实现表格布局。安装 Element UI 后,…

vue实现注销

vue实现注销

实现用户注销功能 在Vue应用中实现用户注销功能通常涉及清除用户会话、重置应用状态并跳转到登录页面。以下是具体实现方法: 清除用户认证信息 使用Vuex或Pinia管理用户状态时,需在注销时重置存储…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…

vue实现监听

vue实现监听

监听数据变化 在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。 // 选项式API export default…

vue 简单实现

vue 简单实现

以下是 Vue 的简单实现示例,涵盖基础模板、数据绑定、方法及生命周期: 基础模板与数据绑定 <div id="app"> <p>{{ message }}</…

vue 实现弹窗

vue 实现弹窗

Vue 实现弹窗的方法 在 Vue 中实现弹窗功能可以通过多种方式完成,以下是几种常见的方法: 使用组件和 v-if/v-show 控制显示 创建一个独立的弹窗组件,通过 v-if 或 v-show…