当前位置:首页 > VUE

vue 实现多级菜单

2026-03-10 07:19:26VUE

实现多级菜单的基本思路

使用递归组件或动态路由结合嵌套数据结构(如树形结构)实现多级菜单渲染。核心是通过组件自身调用自身处理子菜单,并利用 v-for 和条件渲染控制层级展开。

数据结构示例

菜单数据通常为嵌套数组,每个菜单项包含 children 字段表示子菜单:

vue  实现多级菜单

const menuData = [
  {
    title: "一级菜单1",
    children: [
      { title: "二级菜单1-1", children: [] },
      { title: "二级菜单1-2", children: [
        { title: "三级菜单1-2-1", children: [] }
      ]}
    ]
  },
  {
    title: "一级菜单2",
    children: []
  }
];

递归组件实现

创建 MenuComponent.vue,通过 name 属性实现递归调用:

vue  实现多级菜单

<template>
  <ul>
    <li v-for="item in menuList" :key="item.title">
      <span @click="toggleChildren(item)">{{ item.title }}</span>
      <MenuComponent 
        v-if="item.showChildren && item.children.length" 
        :menuList="item.children"
      />
    </li>
  </ul>
</template>

<script>
export default {
  name: "MenuComponent", // 关键:通过name实现递归
  props: {
    menuList: Array
  },
  methods: {
    toggleChildren(item) {
      item.showChildren = !item.showChildren;
    }
  }
};
</script>

动态路由集成

若需与路由结合,可在菜单数据中添加 path 字段,并通过 router-link 导航:

// 路由配置
const routes = [
  { path: '/menu1', component: Page1, children: [
    { path: 'submenu1', component: SubPage1 }
  ]}
];
<!-- 修改递归组件中的渲染部分 -->
<router-link v-if="item.path" :to="item.path">{{ item.title }}</router-link>
<span v-else @click="toggleChildren(item)">{{ item.title }}</span>

样式与交互优化

通过 CSS 控制缩进和动画增强用户体验:

ul {
  list-style: none;
  padding-left: 20px;
}
li {
  margin: 5px 0;
  transition: all 0.3s;
}

注意事项

  • 性能:深层嵌套时需限制递归深度,避免大量渲染。
  • 状态管理:若菜单状态需全局共享(如折叠状态),建议使用 Vuex 或 Pinia。
  • 唯一键值:确保 key 使用唯一标识(如 id 而非 title)。

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

相关文章

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue实现注销

vue实现注销

实现用户注销功能 在Vue应用中实现用户注销功能通常涉及清除用户会话、重置应用状态并跳转到登录页面。以下是具体实现方法: 清除用户认证信息 使用Vuex或Pinia管理用户状态时,需在注销时重置存储…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…

vue博客实现

vue博客实现

Vue 博客实现步骤 项目初始化与基础配置 使用 Vue CLI 或 Vite 创建项目,安装基础依赖如 vue-router 和状态管理库(如 pinia)。配置路由文件实现页面跳转逻辑,例如博客首…