当前位置:首页 > VUE

vue 实现tab贴合

2026-02-18 12:32:06VUE

Vue 实现 Tab 贴合效果

在 Vue 中实现 Tab 贴合效果(即标签页切换内容联动)可以通过动态组件或条件渲染实现。以下是两种常见方法:

动态组件结合 v-bind:is

通过 Vue 的 <component> 动态组件绑定当前选中的组件名:

<template>
  <div>
    <div class="tabs">
      <button 
        v-for="tab in tabs" 
        :key="tab.name"
        @click="currentTab = tab.name"
        :class="{ active: currentTab === tab.name }"
      >
        {{ tab.label }}
      </button>
    </div>
    <component :is="currentTabComponent" class="tab-content"></component>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 'Home',
      tabs: [
        { name: 'Home', label: '首页' },
        { name: 'Posts', label: '文章' },
        { name: 'Archive', label: '归档' }
      ]
    }
  },
  computed: {
    currentTabComponent() {
      return this.currentTab.toLowerCase() + '-tab';
    }
  }
}
</script>

<style>
.tabs button.active {
  background: #ddd;
}
.tab-content {
  padding: 20px;
  border: 1px solid #ddd;
}
</style>

条件渲染 v-if/v-show

通过 v-ifv-show 控制不同内容的显示:

<template>
  <div>
    <div class="tabs">
      <button 
        v-for="tab in tabs" 
        :key="tab.id"
        @click="currentTab = tab.id"
        :class="{ active: currentTab === tab.id }"
      >
        {{ tab.label }}
      </button>
    </div>
    <div v-if="currentTab === 'home'" class="tab-content">首页内容</div>
    <div v-if="currentTab === 'posts'" class="tab-content">文章列表</div>
    <div v-if="currentTab === 'archive'" class="tab-content">归档内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 'home',
      tabs: [
        { id: 'home', label: '首页' },
        { id: 'posts', label: '文章' },
        { id: 'archive', label: '归档' }
      ]
    }
  }
}
</script>

使用第三方库

如需更复杂的 Tab 功能(如动画、URL 同步等),可考虑以下库:

  • Vuetifyv-tabs 组件
  • Element UIel-tabs 组件
  • BootstrapVueb-tabs 组件

以 Element UI 为例:

vue 实现tab贴合

<template>
  <el-tabs v-model="activeTab">
    <el-tab-pane label="首页" name="home">首页内容</el-tab-pane>
    <el-tab-pane label="文章" name="posts">文章列表</el-tab-pane>
    <el-tab-pane label="归档" name="archive">归档内容</el-tab-pane>
  </el-tabs>
</template>

<script>
export default {
  data() {
    return {
      activeTab: 'home'
    }
  }
}
</script>

注意事项

  • 动态组件需提前注册子组件
  • v-if 会销毁/重建 DOM,v-show 仅切换 display 属性
  • 移动端需考虑手势滑动切换(可通过 touch 事件实现)
  • 如需 URL 同步,可结合 vue-router 的 hash 或 query 参数

标签: 贴合vue
分享给朋友:

相关文章

vue实现一个标签选择

vue实现一个标签选择

Vue 标签选择组件实现 基础实现 使用 Vue 的 v-for 和 v-model 指令可以快速实现标签选择功能: <template> <div class="tag-se…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue搜索实现

vue搜索实现

Vue 搜索功能实现方法 基于计算属性的搜索 在 Vue 中可以通过计算属性实现简单的搜索功能。这种方式适合小型数据集,利用 JavaScript 的 filter 方法进行筛选。 data() {…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导航…

vue实现dialog

vue实现dialog

Vue 实现 Dialog 的方法 使用 Vue 原生组件实现 Vue 可以通过组件化的方式实现 Dialog,以下是一个简单的实现示例: <template> <div>…

vue实现导出excel实现流程

vue实现导出excel实现流程

安装依赖库 需要安装 xlsx 和 file-saver 库来处理 Excel 文件的生成和保存。通过 npm 或 yarn 安装: npm install xlsx file-saver # 或…