当前位置:首页 > VUE

vue table实现折叠

2026-01-16 06:06:17VUE

实现折叠表格的基本思路

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

使用v-show实现简单折叠

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

<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等流行库提供了现成的展开行功能:

<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可以配合使用:

vue table实现折叠

<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实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件可…

vue实现积分

vue实现积分

Vue 实现积分功能 在 Vue 中实现积分功能通常涉及前端展示、交互逻辑以及与后端 API 的通信。以下是常见的实现方法和步骤: 积分展示组件 创建一个积分展示组件,用于显示当前用户的积分。可以使…

vue实现方法

vue实现方法

Vue 实现方法 Vue 是一种流行的前端框架,用于构建用户界面和单页应用。以下是几种常见的 Vue 实现方法: 创建 Vue 实例 通过 new Vue() 创建一个 Vue 实例,传入配置对象,…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…

vue实现翻译

vue实现翻译

Vue 实现翻译功能的方法 使用 i18n 插件实现多语言切换 安装 vue-i18n 插件: npm install vue-i18n 创建语言资源文件(如 en.json 和 zh.json):…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…