当前位置:首页 > VUE

vue 实现tab表格

2026-02-18 03:39:13VUE

实现 Tab 表格的基本思路

Tab 表格通常指通过选项卡切换不同表格内容的交互方式。Vue 可以通过动态组件或条件渲染实现这一功能,结合表格组件(如 Element UI 的 el-table)完成数据展示。

方法 1:使用动态组件切换表格

通过 Vue 的 <component :is=""> 动态加载不同表格组件,适合表格结构差异较大的场景。

<template>
  <div>
    <div class="tab-container">
      <button 
        v-for="(tab, index) in tabs" 
        :key="index"
        @click="currentTab = tab.name"
        :class="{ active: currentTab === tab.name }"
      >
        {{ tab.label }}
      </button>
    </div>
    <component :is="currentTab" :data="tableData[currentTab]" />
  </div>
</template>

<script>
import TableA from './TableA.vue';
import TableB from './TableB.vue';

export default {
  components: { TableA, TableB },
  data() {
    return {
      currentTab: 'TableA',
      tabs: [
        { name: 'TableA', label: '表格A' },
        { name: 'TableB', label: '表格B' }
      ],
      tableData: {
        TableA: [{ id: 1, name: '数据A1' }, { id: 2, name: '数据A2' }],
        TableB: [{ id: 1, value: '数据B1' }, { id: 2, value: '数据B2' }]
      }
    };
  }
};
</script>

方法 2:条件渲染同一表格

通过 v-if 切换同一表格的数据源,适合表格结构相同但数据不同的场景。

<template>
  <div>
    <div class="tab-container">
      <button 
        v-for="(tab, index) in tabs" 
        :key="index"
        @click="currentTab = tab.name"
        :class="{ active: currentTab === tab.name }"
      >
        {{ tab.label }}
      </button>
    </div>
    <el-table :data="tableData[currentTab]">
      <el-table-column 
        v-for="col in columns[currentTab]" 
        :key="col.prop"
        :prop="col.prop"
        :label="col.label"
      />
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 'tab1',
      tabs: [
        { name: 'tab1', label: '表格1' },
        { name: 'tab2', label: '表格2' }
      ],
      tableData: {
        tab1: [{ id: 1, name: '张三' }, { id: 2, name: '李四' }],
        tab2: [{ id: 3, age: 25 }, { id: 4, age: 30 }]
      },
      columns: {
        tab1: [{ prop: 'id', label: 'ID' }, { prop: 'name', label: '姓名' }],
        tab2: [{ prop: 'id', label: 'ID' }, { prop: 'age', label: '年龄' }]
      }
    };
  }
};
</script>

方法 3:结合 Element UI 的 Tabs 组件

若使用 Element UI,可直接利用其 el-tabs 组件实现更规范的选项卡交互。

<template>
  <el-tabs v-model="currentTab">
    <el-tab-pane 
      v-for="(tab, index) in tabs" 
      :key="index"
      :label="tab.label" 
      :name="tab.name"
    >
      <el-table :data="tableData[tab.name]">
        <el-table-column 
          v-for="col in columns[tab.name]" 
          :key="col.prop"
          :prop="col.prop"
          :label="col.label"
        />
      </el-table>
    </el-tab-pane>
  </el-tabs>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 'tab1',
      tabs: [
        { name: 'tab1', label: '员工表' },
        { name: 'tab2', label: '部门表' }
      ],
      tableData: {
        tab1: [{ id: 1, name: '张三' }, { id: 2, name: '李四' }],
        tab2: [{ id: 101, dept: '技术部' }, { id: 102, dept: '市场部' }]
      },
      columns: {
        tab1: [{ prop: 'id', label: 'ID' }, { prop: 'name', label: '姓名' }],
        tab2: [{ prop: 'id', label: 'ID' }, { prop: 'dept', label: '部门' }]
      }
    };
  }
};
</script>

关键注意事项

  • 性能优化:若表格数据量大,可通过 v-show 替代 v-if 减少渲染开销,但需提前初始化所有表格。
  • 数据隔离:动态组件方式中,每个表格组件应独立管理分页、排序等逻辑。
  • 样式一致性:选项卡按钮样式需自行处理,或直接使用 UI 库的 Tabs 组件(如 el-tabs)。

vue 实现tab表格

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

相关文章

vue实现好评弹框

vue实现好评弹框

Vue 实现好评弹框的方法 使用 Vue 实现好评弹框可以通过组件化方式完成,结合动态数据绑定和事件处理。以下是具体实现步骤: 1. 创建弹框组件 新建一个 RatingDialog.vue…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

vue实现tag

vue实现tag

Vue 实现标签(Tag)功能 在 Vue 中实现标签(Tag)功能可以通过多种方式完成,以下是一些常见的方法和实现步骤: 使用动态组件和 v-for 通过 v-for 指令动态渲染标签列表,结合…

vue实现xss

vue实现xss

XSS 攻击简介 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,可能导致数据泄露或会话劫持。 Vue 中的 XSS…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.defineProperty…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标…