当前位置:首页 > VUE

vue 实现多级菜单

2026-01-17 11:36:51VUE

Vue 实现多级菜单的方法

递归组件实现

递归组件是处理多级菜单的常见方式,通过组件调用自身实现无限层级嵌套。

<template>
  <ul>
    <li v-for="item in menuData" :key="item.id">
      {{ item.name }}
      <menu-item v-if="item.children && item.children.length" :menu-data="item.children"/>
    </li>
  </ul>
</template>

<script>
export default {
  name: 'MenuItem',
  props: {
    menuData: {
      type: Array,
      required: true
    }
  }
}
</script>

动态组件实现

通过动态组件和路由配置实现多级菜单,适合需要路由跳转的场景。

<template>
  <div>
    <div v-for="item in menu" :key="item.path">
      <router-link v-if="!item.children" :to="item.path">
        {{ item.meta.title }}
      </router-link>
      <el-submenu v-else :index="item.path">
        <template #title>{{ item.meta.title }}</template>
        <menu-item :menu="item.children"/>
      </el-submenu>
    </div>
  </div>
</template>

Element UI 实现

使用 Element UI 的 el-menu 组件可以快速实现多级菜单。

<template>
  <el-menu :default-active="activeIndex" mode="vertical">
    <template v-for="item in menuData">
      <el-submenu v-if="item.children" :key="item.id" :index="item.id">
        <template #title>{{ item.title }}</template>
        <menu-item :menu-data="item.children"/>
      </el-submenu>
      <el-menu-item v-else :key="item.id" :index="item.id">
        {{ item.title }}
      </el-menu-item>
    </template>
  </el-menu>
</template>

数据格式示例

多级菜单通常需要特定的数据结构支持。

const menuData = [
  {
    id: 1,
    title: '一级菜单',
    children: [
      {
        id: 11,
        title: '二级菜单',
        children: [
          { id: 111, title: '三级菜单' }
        ]
      }
    ]
  }
]

路由配置示例

结合 Vue Router 实现动态路由菜单。

const routes = [
  {
    path: '/parent',
    component: Parent,
    children: [
      {
        path: 'child',
        component: Child,
        children: [
          { path: 'grandchild', component: Grandchild }
        ]
      }
    ]
  }
]

样式处理技巧

为多级菜单添加样式增强用户体验。

.el-menu--vertical .el-menu {
  background-color: #f5f5f5;
}
.el-menu-item {
  transition: all 0.3s;
}

性能优化

对于大型菜单数据,可以使用虚拟滚动优化性能。

vue 实现多级菜单

<template>
  <virtual-list :size="50" :remain="10">
    <menu-item v-for="item in bigMenuData" :key="item.id" :item="item"/>
  </virtual-list>
</template>

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

相关文章

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue实现换行

vue实现换行

Vue 中实现换行的几种方法 在 Vue 中实现换行可以通过多种方式,具体取决于使用场景和需求。以下是常见的几种方法: 使用 HTML 的 <br> 标签 在模板中直接使用 <br…

vue实现webapp

vue实现webapp

Vue 实现 WebApp 的基本步骤 环境准备 确保已安装 Node.js 和 npm/yarn。通过 Vue CLI 或 Vite 创建项目: npm install -g @vue/cli v…

vue 实现table

vue 实现table

Vue 实现 Table 的方法 使用原生 HTML 表格 通过 Vue 的 v-for 指令动态渲染表格数据,适合简单表格场景。 <template> <table>…

vue滚动加载实现

vue滚动加载实现

vue滚动加载实现 滚动加载是一种常见的优化手段,通过监听滚动事件动态加载数据,减少初始渲染压力。以下是几种实现方式: 使用IntersectionObserver API Intersection…

vue 不可回退实现

vue 不可回退实现

不可回退的实现方法 在Vue中,实现不可回退的功能通常涉及路由控制和状态管理。以下是几种常见的方法: 禁用浏览器后退按钮 通过监听popstate事件阻止默认行为: mounted() {…