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

性能优化

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

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

vue 实现多级菜单

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

相关文章

vue手动实现弹窗

vue手动实现弹窗

实现弹窗组件的基本结构 在Vue中手动实现弹窗组件,需要创建一个独立的弹窗组件,并通过props控制其显示与隐藏。弹窗组件通常包含遮罩层、内容区域和关闭按钮。 <template>…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用…

vue 方法实现

vue 方法实现

在 Vue 中,方法的实现通常通过 methods 选项完成。以下是 Vue 方法实现的核心要点和示例: 基本方法定义 在 Vue 组件中定义方法时,需将函数声明放在 methods 对象内。这些…

vue 指令实现

vue 指令实现

Vue 指令实现 Vue 指令是 Vue.js 提供的特殊属性,用于在 DOM 元素上添加特殊行为。指令以 v- 前缀开头,例如 v-model、v-if、v-for 等。以下是实现自定义指令和常用内…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…