当前位置:首页 > VUE

vue实现分组表格

2026-01-15 07:28:48VUE

Vue 实现分组表格的方法

使用 v-for 嵌套循环实现分组

通过嵌套的 v-for 循环可以轻松实现分组表格。外层循环遍历分组数据,内层循环遍历每组中的具体项。

<template>
  <table>
    <tbody v-for="group in groupedData" :key="group.name">
      <tr class="group-header">
        <th colspan="2">{{ group.name }}</th>
      </tr>
      <tr v-for="item in group.items" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.value }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  data() {
    return {
      groupedData: [
        {
          name: 'Group 1',
          items: [
            { id: 1, name: 'Item 1', value: 'Value 1' },
            { id: 2, name: 'Item 2', value: 'Value 2' }
          ]
        },
        {
          name: 'Group 2',
          items: [
            { id: 3, name: 'Item 3', value: 'Value 3' }
          ]
        }
      ]
    }
  }
}
</script>

<style>
.group-header {
  background-color: #f5f5f5;
  font-weight: bold;
}
</style>

使用计算属性动态分组

当原始数据需要按特定条件分组时,可以使用计算属性动态生成分组数据。

<template>
  <table>
    <tbody v-for="group in groupedItems" :key="group.category">
      <tr class="group-header">
        <th colspan="2">{{ group.category }}</th>
      </tr>
      <tr v-for="item in group.items" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.price }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Apple', price: 1.2, category: 'Fruit' },
        { id: 2, name: 'Banana', price: 0.8, category: 'Fruit' },
        { id: 3, name: 'Carrot', price: 0.5, category: 'Vegetable' }
      ]
    }
  },
  computed: {
    groupedItems() {
      const groups = {}
      this.items.forEach(item => {
        if (!groups[item.category]) {
          groups[item.category] = {
            category: item.category,
            items: []
          }
        }
        groups[item.category].items.push(item)
      })
      return Object.values(groups)
    }
  }
}
</script>

使用第三方组件库

对于更复杂的分组表格需求,可以考虑使用专门的UI组件库:

  1. Element UI 的表格组件支持分组显示

    <el-table :data="tableData">
    <el-table-column prop="date" label="Date"></el-table-column>
    <el-table-column label="Group">
     <el-table-column prop="name" label="Name"></el-table-column>
     <el-table-column prop="amount" label="Amount"></el-table-column>
    </el-table-column>
    </el-table>
  2. Vuetify 的数据表格也支持类似功能

    <v-data-table
    :headers="headers"
    :items="items"
    group-by="category"
    ></v-data-table>

实现可折叠的分组表格

通过添加展开/折叠功能可以提升分组表格的交互体验。

<template>
  <table>
    <tbody v-for="group in groups" :key="group.name">
      <tr class="group-header" @click="toggleGroup(group)">
        <th colspan="2">
          {{ group.name }}
          <span>{{ group.isOpen ? '▼' : '▶' }}</span>
        </th>
      </tr>
      <tr v-for="item in group.items" v-show="group.isOpen" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.value }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  data() {
    return {
      groups: [
        {
          name: 'Group 1',
          items: [
            { id: 1, name: 'Item 1', value: 'Value 1' },
            { id: 2, name: 'Item 2', value: 'Value 2' }
          ],
          isOpen: true
        },
        {
          name: 'Group 2',
          items: [
            { id: 3, name: 'Item 3', value: 'Value 3' }
          ],
          isOpen: false
        }
      ]
    }
  },
  methods: {
    toggleGroup(group) {
      group.isOpen = !group.isOpen
    }
  }
}
</script>

响应式分组表格设计

为了确保分组表格在不同设备上都能良好显示,可以添加响应式设计。

vue实现分组表格

@media screen and (max-width: 600px) {
  table {
    display: block;
  }
  tbody {
    display: block;
    margin-bottom: 1rem;
  }
  .group-header th {
    display: block;
  }
  tr {
    display: block;
    margin-bottom: 0.5rem;
  }
  td {
    display: block;
    text-align: right;
  }
  td::before {
    content: attr(data-label);
    float: left;
    font-weight: bold;
  }
}

这些方法涵盖了从基础到高级的Vue分组表格实现方式,可以根据具体需求选择合适的方法或组合使用多种技术。

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

相关文章

vue实现拖放

vue实现拖放

Vue 实现拖放功能 Vue 中实现拖放功能通常可以通过 HTML5 的原生拖放 API 或第三方库(如 vuedraggable)来实现。以下是两种方法的详细说明。 使用 HTML5 原生拖放 A…

vue实现sso

vue实现sso

Vue 实现 SSO(单点登录)方案 单点登录(SSO)允许用户通过一次登录访问多个相关系统。以下是基于 Vue 的实现方案: 使用 OAuth2/OpenID Connect 协议 OAuth2…

vue实现watch

vue实现watch

监听数据变化 在Vue中,watch用于监听响应式数据的变化并执行回调函数。基本语法如下: watch: { propertyName(newValue, oldValue) { //…

vue实现文章滚动

vue实现文章滚动

Vue 实现文章滚动效果 使用 CSS 实现基础滚动 通过 CSS 的 overflow 和 height 属性控制滚动区域,适用于静态内容滚动。在 Vue 模板中定义固定高度的容器,内容超出后自动滚…

vue 实现批量关注

vue 实现批量关注

实现批量关注的思路 批量关注功能通常涉及前端界面交互与后端接口的配合。以下是基于Vue的实现方案: 前端界面设计 使用v-for渲染用户列表,每个用户项包含复选框和关注按钮。通过v-model绑定选…

vue中实现tree

vue中实现tree

Vue 中实现 Tree 组件 在 Vue 中实现 Tree 组件可以通过递归组件或第三方库完成。以下是两种常见方法: 使用递归组件实现 Tree 递归组件是 Vue 中实现 Tree 结构的常见方…