当前位置:首页 > 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>

动态生成导航菜单

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

vue实现导航菜单

<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>

面包屑导航实现

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

vue实现导航菜单

<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>

样式与交互增强

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

<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 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除操…

vue实现贴图

vue实现贴图

Vue 实现贴图功能 在Vue中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <templ…

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…

vue实现试卷

vue实现试卷

Vue实现试卷系统的基本思路 使用Vue.js构建试卷系统需要结合组件化开发、状态管理和后端数据交互。核心功能包括题目展示、答题逻辑、计时器和提交答案。 核心功能模块划分 试卷组件结构 试卷容器组…

vue  实现tab

vue 实现tab

实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过动态组件或条件渲染完成。以下是两种常见方法: 使用 v-if 或 v-show 实现条件渲染 通过绑定 currentTab 变量…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…