当前位置:首页 > VUE

vue3实现菜单

2026-01-21 19:45:56VUE

Vue3 实现菜单的基本方法

使用 Vue3 的 Composition API 和响应式特性可以高效地实现动态菜单。以下是一个基础实现方案:

创建菜单数据结构

const menuItems = ref([
  {
    title: '首页',
    path: '/',
    children: []
  },
  {
    title: '产品',
    path: '/products',
    children: [
      { title: '产品列表', path: '/products/list' }
    ]
  }
])

递归组件实现多级菜单

<template>
  <ul>
    <li v-for="item in items" :key="item.path">
      <router-link :to="item.path">{{ item.title }}</router-link>
      <menu-item v-if="item.children?.length" :items="item.children"/>
    </li>
  </ul>
</template>

<script setup>
defineProps({
  items: {
    type: Array,
    required: true
  }
})
</script>

使用 Vue Router 集成

结合 Vue Router 可以实现路由跳转和菜单高亮:

vue3实现菜单

import { useRoute } from 'vue-router'

const route = useRoute()
const isActive = (path) => {
  return route.path === path
}

动态菜单权限控制

通过权限验证动态生成菜单:

const filteredMenu = computed(() => {
  return menuItems.value.filter(item => {
    return checkPermission(item.requiredRole)
  })
})

菜单状态管理

使用 Pinia 管理菜单展开状态:

vue3实现菜单

// stores/menu.js
export const useMenuStore = defineStore('menu', {
  state: () => ({
    expandedItems: []
  }),
  actions: {
    toggleExpand(path) {
      const index = this.expandedItems.indexOf(path)
      index === -1 
        ? this.expandedItems.push(path)
        : this.expandedItems.splice(index, 1)
    }
  }
})

响应式菜单样式

添加 CSS 过渡效果增强用户体验:

.menu-enter-active,
.menu-leave-active {
  transition: all 0.3s ease;
}

.menu-enter-from,
.menu-leave-to {
  opacity: 0;
  transform: translateY(-10px);
}

移动端适配方案

实现可折叠的移动端菜单:

<template>
  <button @click="toggleMobileMenu">菜单</button>
  <transition name="menu">
    <div v-show="isMobileMenuOpen" class="mobile-menu">
      <menu-item :items="menuItems"/>
    </div>
  </transition>
</template>

性能优化建议

对于大型菜单系统,考虑虚拟滚动技术:

import { useVirtualList } from '@vueuse/core'

const { list, containerProps } = useVirtualList(
  menuItems,
  { itemHeight: 48 }
)

这些实现方式可以根据具体需求进行组合和扩展,构建出功能完善且用户体验良好的菜单系统。

标签: 菜单
分享给朋友:

相关文章

vue菜单tab实现

vue菜单tab实现

实现Vue菜单Tab的步骤 在Vue中实现菜单Tab功能,可以通过动态组件或条件渲染来实现。以下是几种常见的方法: 使用动态组件 动态组件允许根据当前选中的Tab动态切换显示内容。定义一个组件数组…

用css制作下拉菜单

用css制作下拉菜单

使用纯CSS制作下拉菜单 HTML结构 基础的下拉菜单需要嵌套的HTML结构,通常使用<ul>和<li>标签实现层级关系: <div class="dropdown"…

jquery 菜单

jquery 菜单

jQuery 菜单实现方法 使用 jQuery 创建动态菜单可以通过多种方式实现,以下是几种常见的方法: 基于 HTML 和 CSS 的基础结构 创建菜单的 HTML 结构通常使用无序列表 <…

css制作下拉菜单

css制作下拉菜单

使用纯CSS制作下拉菜单 通过HTML和CSS可以创建无需JavaScript的下拉菜单,主要利用:hover伪类和display属性控制显示隐藏。 HTML结构示例: <div cla…

css制作横向菜单

css制作横向菜单

使用 Flexbox 制作横向菜单 Flexbox 是制作横向菜单的现代方法,代码简洁且兼容性好。以下是一个基本实现: <nav class="horizontal-menu"> &…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…