当前位置:首页 > VUE

vue实现表格收缩展开

2026-01-21 19:02:24VUE

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

使用 v-ifv-show 控制显隐

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

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 组件库,可直接利用其内置的展开行功能。

vue实现表格收缩展开

<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 的过渡效果使展开/收缩更平滑。

<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实现查询替换

vue实现查询替换

Vue 实现查询替换功能 在 Vue 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式: 基础实现 <template> <div>…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDi…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…