当前位置:首页 > VUE

vue实现导航菜单

2026-02-11 05:36:13VUE

Vue 实现导航菜单的方法

使用 Vue Router 实现基础导航

安装 Vue Router 依赖:

npm install vue-router

在项目中配置路由:

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

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

export default router

在 App.vue 中添加导航菜单:

<template>
  <nav>
    <router-link to="/">Home</router-link>
    <router-link to="/about">About</router-link>
  </nav>
  <router-view />
</template>

实现动态导航菜单

创建可配置的导航菜单数据:

// data/navItems.js
export default [
  { name: 'Home', path: '/' },
  { name: 'About', path: '/about' },
  { name: 'Contact', path: '/contact' }
]

在组件中使用动态菜单:

<template>
  <nav>
    <router-link 
      v-for="item in navItems" 
      :key="item.path"
      :to="item.path"
    >
      {{ item.name }}
    </router-link>
  </nav>
</template>

<script>
import navItems from '@/data/navItems'
export default {
  data() {
    return {
      navItems
    }
  }
}
</script>

添加菜单激活样式

使用 Vue Router 的 active-class:

<router-link 
  to="/about" 
  active-class="active"
>
  About
</router-link>

或者使用 exact-active-class 精确匹配:

<router-link 
  to="/" 
  exact-active-class="exact-active"
>
  Home
</router-link>

实现嵌套导航菜单

配置嵌套路由:

// router/index.js
{
  path: '/products',
  component: Products,
  children: [
    { path: '', component: ProductList },
    { path: ':id', component: ProductDetail }
  ]
}

创建嵌套导航组件:

<template>
  <div>
    <nav>
      <router-link to="/products">All Products</router-link>
      <router-link 
        v-for="product in products"
        :key="product.id"
        :to="`/products/${product.id}`"
      >
        {{ product.name }}
      </router-link>
    </nav>
    <router-view />
  </div>
</template>

添加下拉菜单功能

实现基础下拉菜单:

<template>
  <div class="dropdown">
    <button @click="toggleDropdown">Menu</button>
    <ul v-show="isOpen">
      <li v-for="item in menuItems" :key="item.path">
        <router-link :to="item.path">{{ item.name }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOpen: false,
      menuItems: [
        { name: 'Home', path: '/' },
        { name: 'About', path: '/about' }
      ]
    }
  },
  methods: {
    toggleDropdown() {
      this.isOpen = !this.isOpen
    }
  }
}
</script>

<style>
.dropdown {
  position: relative;
  display: inline-block;
}
.dropdown ul {
  position: absolute;
  background: white;
  border: 1px solid #ddd;
}
</style>

实现面包屑导航

创建面包屑组件:

<template>
  <div class="breadcrumbs">
    <router-link 
      v-for="(crumb, index) in crumbs" 
      :key="index"
      :to="crumb.path"
    >
      {{ crumb.name }}
    </router-link>
  </div>
</template>

<script>
export default {
  computed: {
    crumbs() {
      const pathArray = this.$route.path.split('/')
      return pathArray.map((path, i) => {
        return {
          name: path || 'home',
          path: pathArray.slice(0, i + 1).join('/') || '/'
        }
      })
    }
  }
}
</script>

添加响应式导航菜单

实现移动端响应式菜单:

<template>
  <nav>
    <button @click="toggleMenu">☰</button>
    <ul :class="{ 'show': menuOpen }">
      <li v-for="item in navItems" :key="item.path">
        <router-link :to="item.path">{{ item.name }}</router-link>
      </li>
    </ul>
  </nav>
</template>

<script>
export default {
  data() {
    return {
      menuOpen: false,
      navItems: [
        { name: 'Home', path: '/' },
        { name: 'About', path: '/about' }
      ]
    }
  },
  methods: {
    toggleMenu() {
      this.menuOpen = !this.menuOpen
    }
  }
}
</script>

<style>
@media (max-width: 768px) {
  ul {
    display: none;
  }
  ul.show {
    display: block;
  }
}
</style>

使用第三方 UI 库实现导航

使用 Element Plus 的菜单组件:

vue实现导航菜单

<template>
  <el-menu mode="horizontal" router>
    <el-menu-item index="/">Home</el-menu-item>
    <el-menu-item index="/about">About</el-menu-item>
    <el-submenu index="products">
      <template #title>Products</template>
      <el-menu-item index="/products/1">Product 1</el-menu-item>
      <el-menu-item index="/products/2">Product 2</el-menu-item>
    </el-submenu>
  </el-menu>
</template>

<script>
import { ElMenu, ElMenuItem, ElSubmenu } from 'element-plus'
export default {
  components: {
    ElMenu,
    ElMenuItem,
    ElSubmenu
  }
}
</script>

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

相关文章

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

vue实现海报

vue实现海报

Vue 实现海报生成方案 使用 html2canvas 库 html2canvas 是一个将 HTML 元素转换为 Canvas 的库,适合将 Vue 组件渲染为海报图片 安装依赖: npm in…

vue广播实现

vue广播实现

vue广播实现 在Vue中实现广播功能可以通过事件总线(Event Bus)或Vuex来完成。以下是两种常见的实现方式: 使用事件总线(Event Bus) 事件总线是一种简单的跨组件通信方式,适用…

vue逻辑实现怎么实现

vue逻辑实现怎么实现

Vue 逻辑实现方法 Vue 的逻辑实现主要通过组件化、响应式数据、计算属性、方法、生命周期钩子等方式完成。以下是一些核心实现方法: 数据驱动与响应式 在 Vue 中,通过 data 选项定义响应式…

vue ui实现创建vue项目

vue ui实现创建vue项目

使用 Vue UI 创建 Vue 项目 Vue UI 是 Vue CLI 提供的图形化界面工具,可以通过可视化操作创建和管理 Vue 项目。 安装 Vue CLI 确保已安装 Node.js(建议版…