当前位置:首页 > VUE

vue 实现tab贴合

2026-02-18 12:32:06VUE

Vue 实现 Tab 贴合效果

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

动态组件结合 v-bind:is

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

vue 实现tab贴合

<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 控制不同内容的显示:

vue 实现tab贴合

<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 为例:

<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中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录组…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 con…

vue 实现过滤

vue 实现过滤

Vue 实现过滤的方法 在 Vue 中实现过滤功能可以通过多种方式完成,包括使用计算属性、自定义过滤器、第三方库等。以下是几种常见的实现方法: 使用计算属性进行过滤 计算属性是 Vue 中最常用的过…

vue实现标签

vue实现标签

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

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div…