当前位置:首页 > 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 的过渡效果使展开/收缩更平滑。

<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中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现 安装…

vue日历表格实现

vue日历表格实现

Vue 日历表格实现方法 基础日历表格结构 使用 Vue 的模板语法构建日历表格框架,通过 v-for 循环生成日期单元格。核心是计算当前月份的天数及起始星期位置。 <template>…

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓、面…

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法为…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue实现下载暂停

vue实现下载暂停

Vue实现下载暂停功能 在Vue中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLHtt…