当前位置:首页 > VUE

vue实现菜单树

2026-02-18 16:41:14VUE

实现菜单树的基本思路

在Vue中实现菜单树通常需要结合递归组件或第三方库(如Element UI的Tree组件)。核心是将嵌套的菜单数据渲染为可展开/折叠的树形结构。

使用递归组件实现

递归组件适合自定义程度高的场景,以下是一个基础实现示例:

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

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

使用Element UI Tree组件

若项目使用Element UI,可直接使用其Tree组件:

<template>
  <el-tree
    :data="menuData"
    :props="defaultProps"
    @node-click="handleNodeClick">
  </el-tree>
</template>

<script>
export default {
  data() {
    return {
      menuData: [{
        label: '一级菜单',
        children: [{
          label: '二级菜单'
        }]
      }],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    }
  },
  methods: {
    handleNodeClick(data) {
      console.log(data)
    }
  }
}
</script>

动态加载菜单数据

当菜单数据需要异步获取时:

methods: {
  fetchMenuData() {
    axios.get('/api/menu').then(response => {
      this.menuData = response.data
    })
  }
},
created() {
  this.fetchMenuData()
}

添加样式和交互

为递归组件添加基础样式和交互:

ul {
  list-style-type: none;
  padding-left: 20px;
}
li {
  cursor: pointer;
  padding: 5px 0;
}
li:hover {
  background-color: #f5f5f5;
}

处理权限菜单

如需根据权限过滤菜单:

computed: {
  filteredMenu() {
    return this.menuData.filter(menu => {
      return this.checkPermission(menu.permission)
    })
  }
}

注意事项

  • 递归组件必须设置name属性
  • 树形数据结构应包含唯一标识字段(通常为id
  • 大数据量时考虑使用虚拟滚动优化性能
  • 复杂交互建议使用成熟组件库(如Element UI、Ant Design Vue等)

vue实现菜单树

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

相关文章

vue实现弹窗可切换

vue实现弹窗可切换

实现弹窗可切换的 Vue 方案 动态组件切换 通过 Vue 的 <component :is="currentComponent"> 动态加载不同弹窗组件,结合 v-if 控制显示状态。…

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <templat…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素…

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…

vue实现github

vue实现github

Vue 实现 GitHub 相关功能 创建 GitHub API 请求 在 Vue 项目中,可以使用 axios 或 fetch 与 GitHub API 进行交互。需要在 GitHub 上创建个人访…

vue实现eventbus

vue实现eventbus

Vue 中实现 EventBus 在 Vue 中,EventBus 是一种跨组件通信的机制,尤其适用于非父子组件之间的数据传递。以下是实现 EventBus 的几种方法: 方法一:使用 Vue 实例…