当前位置:首页 > VUE

vue 路由实现tab切换

2026-01-23 08:30:43VUE

Vue 路由实现 Tab 切换的方法

使用 router-view 和动态路由

通过 Vue Router 的 router-view 和动态路由可以实现 Tab 切换功能。定义路由时,将 Tab 内容作为子路由或动态路由加载。

// router.js
const routes = [
  {
    path: '/tabs',
    component: TabsContainer,
    children: [
      { path: 'tab1', component: Tab1 },
      { path: 'tab2', component: Tab2 },
      { path: 'tab3', component: Tab3 }
    ]
  }
]

在模板中,使用 router-link 导航,并通过 router-view 显示内容:

<template>
  <div>
    <router-link to="/tabs/tab1">Tab 1</router-link>
    <router-link to="/tabs/tab2">Tab 2</router-link>
    <router-link to="/tabs/tab3">Tab 3</router-link>
    <router-view></router-view>
  </div>
</template>

使用 v-if 控制显示

如果 Tab 内容较简单,可以通过 v-ifv-show 结合路由状态切换显示。

vue 路由实现tab切换

<template>
  <div>
    <button @click="currentTab = 'tab1'">Tab 1</button>
    <button @click="currentTab = 'tab2'">Tab 2</button>

    <Tab1 v-if="currentTab === 'tab1'" />
    <Tab2 v-if="currentTab === 'tab2'" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 'tab1'
    }
  }
}
</script>

结合 Vuex 管理状态

如果多个组件需要共享 Tab 状态,可以使用 Vuex 存储当前激活的 Tab。

// store.js
export default new Vuex.Store({
  state: {
    activeTab: 'tab1'
  },
  mutations: {
    setActiveTab(state, tabName) {
      state.activeTab = tabName
    }
  }
})

在组件中通过 mapStatemapMutations 使用:

vue 路由实现tab切换

<template>
  <div>
    <button @click="setActiveTab('tab1')">Tab 1</button>
    <button @click="setActiveTab('tab2')">Tab 2</button>

    <Tab1 v-if="activeTab === 'tab1'" />
    <Tab2 v-if="activeTab === 'tab2'" />
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex'

export default {
  computed: {
    ...mapState(['activeTab'])
  },
  methods: {
    ...mapMutations(['setActiveTab'])
  }
}
</script>

使用第三方库

如果需要更复杂的 Tab 功能(如动画、懒加载),可以使用第三方库如 vue-tabs-component

安装:

npm install vue-tabs-component

使用示例:

<template>
  <tabs>
    <tab name="Tab 1">
      <Tab1 />
    </tab>
    <tab name="Tab 2">
      <Tab2 />
    </tab>
  </tabs>
</template>

<script>
import { Tabs, Tab } from 'vue-tabs-component'

export default {
  components: { Tabs, Tab }
}
</script>

注意事项

  • 路由方式适合需要 URL 同步的场景(如刷新后保持 Tab 状态)。
  • v-if 方式适合简单逻辑,但切换时组件会销毁/重建。
  • v-show 仅切换显示,适合频繁切换但无需重新渲染的场景。
  • 第三方库提供更多功能,但会增加项目体积。

标签: 路由vue
分享给朋友:

相关文章

vue实现录播播放

vue实现录播播放

Vue 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

vue实现录音文件播放

vue实现录音文件播放

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

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &l…

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…