当前位置:首页 > VUE

vue实现表格收缩展开

2026-01-21 19:02:24VUE

Vue 表格展开/收缩实现方法

使用 v-ifv-show 控制显隐

通过数据驱动的方式控制行的展开与收缩状态,结合 Vue 的指令实现动态渲染。

<template>
  <table>
    <tr v-for="item in tableData" :key="item.id">
      <td>{{ item.name }}</td>
      <td>
        <button @click="toggleExpand(item)">
          {{ item.expanded ? '收起' : '展开' }}
        </button>
      </td>
    </tr>
    <!-- 展开内容 -->
    <tr v-if="item.expanded" v-for="item in tableData" :key="'detail-' + item.id">
      <td colspan="2">{{ item.details }}</td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { id: 1, name: '项目1', details: '详细内容...', expanded: false },
        // 其他数据...
      ]
    }
  },
  methods: {
    toggleExpand(item) {
      item.expanded = !item.expanded
    }
  }
}
</script>

使用 Element UI 的展开行功能

如果使用 Element UI 组件库,可直接利用其内置的展开行功能。

<template>
  <el-table
    :data="tableData"
    style="width: 100%">
    <el-table-column type="expand">
      <template #default="props">
        <p>详情: {{ props.row.details }}</p>
      </template>
    </el-table-column>
    <el-table-column prop="name" label="名称"/>
  </el-table>
</template>

动态嵌套表格实现多级展开

通过递归组件实现多级嵌套展开效果。

<template>
  <table>
    <TableRow 
      v-for="item in tableData" 
      :key="item.id" 
      :row-data="item"
      @toggle="onToggle"/>
  </table>
</template>

<!-- TableRow.vue 组件 -->
<template>
  <tr>
    <td>{{ rowData.name }}</td>
    <td>
      <button @click="$emit('toggle', rowData.id)">
        {{ rowData.expanded ? '收起' : '展开' }}
      </button>
    </td>
  </tr>
  <tr v-if="rowData.expanded">
    <td colspan="2">
      <!-- 嵌套内容或子表格 -->
      <table v-if="rowData.children">
        <TableRow 
          v-for="child in rowData.children"
          :key="child.id"
          :row-data="child"
          @toggle="$emit('toggle', child.id)"/>
      </table>
    </td>
  </tr>
</template>

动画过渡效果

添加 Vue 的过渡效果使展开/收缩更平滑。

vue实现表格收缩展开

<transition name="slide">
  <tr v-if="item.expanded">
    <td colspan="2">{{ item.details }}</td>
  </tr>
</transition>

<style>
.slide-enter-active, .slide-leave-active {
  transition: all 0.3s ease;
  max-height: 100px;
}
.slide-enter, .slide-leave-to {
  opacity: 0;
  max-height: 0;
}
</style>

实现要点

  • 数据驱动:通过修改数据项的 expanded 属性控制展开状态
  • 性能优化:大数据量时建议使用虚拟滚动
  • 组件化:复杂结构建议拆分为子组件
  • 无障碍:确保按钮有明确的 ARIA 标签

以上方法可根据具体需求组合使用,Element UI 等组件库提供了开箱即用的解决方案,自定义实现则更灵活可控。

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

相关文章

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如a…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展示…