当前位置:首页 > 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 结合路由状态切换显示。

<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 使用:

<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

使用示例:

vue 路由实现tab切换

<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
分享给朋友:

相关文章

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue 实现挂载

vue 实现挂载

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

vue实现曲线

vue实现曲线

Vue 实现曲线的方法 在 Vue 中实现曲线可以通过多种方式,包括使用 SVG、Canvas 或第三方库如 D3.js、ECharts 等。以下是几种常见的方法: 使用 SVG 绘制曲线 SVG…

vue搜索实现

vue搜索实现

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

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…

vue实现折叠

vue实现折叠

Vue 实现折叠功能 在 Vue 中实现折叠功能可以通过多种方式完成,以下介绍几种常见的方法。 使用 v-show 或 v-if 控制显示隐藏 通过 Vue 的指令 v-show 或 v-if 可以…