当前位置:首页 > VUE

vue实现导航菜单

2026-03-08 05:17:44VUE

Vue 实现导航菜单的方法

使用 Vue Router 实现基础导航

安装 Vue Router 并配置路由表,通过 <router-link> 组件实现导航跳转。

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: () => import('../views/About.vue') }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})
<template>
  <nav>
    <router-link to="/">Home</router-link>
    <router-link to="/about">About</router-link>
  </nav>
  <router-view/>
</template>

动态生成导航菜单

通过遍历路由表动态生成导航项,适合多页面的场景。

<template>
  <nav>
    <router-link 
      v-for="route in routes" 
      :key="route.path" 
      :to="route.path"
    >
      {{ route.meta?.title || route.path }}
    </router-link>
  </nav>
</template>

<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const router = useRouter()
const routes = ref(router.getRoutes().filter(r => !r.meta?.hidden))
</script>

响应式侧边栏菜单

结合 Element Plus 或 Ant Design Vue 等 UI 框架实现响应式侧边栏。

<template>
  <el-menu 
    :default-active="activeIndex" 
    mode="horizontal"
    @select="handleSelect"
  >
    <el-menu-item index="1">Home</el-menu-item>
    <el-submenu index="2">
      <template #title>Products</template>
      <el-menu-item index="2-1">Option 1</el-menu-item>
      <el-menu-item index="2-2">Option 2</el-menu-item>
    </el-submenu>
  </el-menu>
</template>

<script setup>
import { ref } from 'vue'

const activeIndex = ref('1')
const handleSelect = (key) => {
  console.log(key)
}
</script>

面包屑导航实现

通过监听路由变化生成面包屑导航,展示当前页面路径。

<template>
  <div class="breadcrumb">
    <span 
      v-for="(item, index) in breadcrumbs" 
      :key="index"
    >
      <router-link 
        v-if="index < breadcrumbs.length - 1" 
        :to="item.path"
      >
        {{ item.meta.title }}
      </router-link>
      <span v-else>{{ item.meta.title }}</span>
      <span v-if="index < breadcrumbs.length - 1"> / </span>
    </span>
  </div>
</template>

<script setup>
import { computed } from 'vue'
import { useRoute } from 'vue-router'

const route = useRoute()
const breadcrumbs = computed(() => {
  return route.matched.filter(r => r.meta?.title)
})
</script>

权限控制菜单

根据用户权限动态过滤可访问的菜单项,实现权限控制。

<template>
  <nav>
    <router-link 
      v-for="route in accessibleRoutes" 
      :key="route.path" 
      :to="route.path"
    >
      {{ route.meta.title }}
    </router-link>
  </nav>
</template>

<script setup>
import { computed } from 'vue'
import { useRouter } from 'vue-router'

const router = useRouter()
const userRoles = ['admin'] // 从store获取实际用户角色

const accessibleRoutes = computed(() => {
  return router.getRoutes().filter(route => {
    const requiredRoles = route.meta?.roles || []
    return requiredRoles.length === 0 || 
           requiredRoles.some(role => userRoles.includes(role))
  })
})
</script>

样式与交互增强

为导航菜单添加过渡动画和活跃状态样式,提升用户体验。

vue实现导航菜单

<template>
  <nav>
    <router-link 
      v-for="route in routes" 
      :key="route.path" 
      :to="route.path"
      active-class="active-link"
      exact-active-class="exact-active-link"
    >
      {{ route.meta.title }}
    </router-link>
  </nav>
</template>

<style scoped>
nav {
  display: flex;
  gap: 1rem;
  padding: 1rem;
}

.active-link {
  color: #42b983;
  font-weight: bold;
}

.exact-active-link {
  border-bottom: 2px solid #42b983;
}
</style>

以上方法涵盖了从基础到高级的 Vue 导航菜单实现方式,可根据项目需求选择适合的方案或组合使用。

标签: 菜单vue
分享给朋友:

相关文章

vue表格实现教学

vue表格实现教学

Vue 表格实现方法 使用原生HTML表格 在Vue模板中直接使用HTML的<table>标签,结合v-for动态渲染数据: <template> <table&g…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现接口

vue实现接口

在 Vue 中实现接口请求 Vue 本身不直接提供 HTTP 请求功能,通常需要借助第三方库如 axios 或 fetch 来实现接口请求。以下是几种常见方法: 使用 axios 发送请求 安装 a…

vue 实现跳转

vue 实现跳转

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转通常可以通过以下几种方式实现,具体选择取决于项目需求和技术栈(如是否使用 Vue Router)。 使用 Vue Router 进行编程式导航…

vue实现指引

vue实现指引

Vue 实现指引功能 Vue 中实现指引功能可以通过多种方式完成,常见的有使用第三方库或自定义实现。以下是几种常见方法: 使用第三方库(如 driver.js) 安装 driver.js: np…

vue实现type切换

vue实现type切换

Vue 实现 Type 切换的实现方法 在 Vue 中实现 Type 切换功能可以通过动态组件、条件渲染或路由切换等方式实现。以下是几种常见方法: 使用 v-if 或 v-show 条件渲染 通过绑…