当前位置:首页 > VUE

vue 树形菜单实现

2026-01-19 07:47:43VUE

Vue 树形菜单实现方法

递归组件实现

递归组件是Vue中实现树形结构的常见方式。通过组件调用自身实现无限层级嵌套。

<template>
  <ul>
    <li v-for="item in treeData" :key="item.id">
      {{ item.label }}
      <tree-menu v-if="item.children" :treeData="item.children"></tree-menu>
    </li>
  </ul>
</template>

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

使用第三方库

对于复杂需求,可以考虑使用成熟的第三方组件库:

  • element-uiel-tree
  • ant-design-vuea-tree
  • vuetifyv-treeview

element-ui为例:

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

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

动态加载数据

对于大数据量场景,可以实现懒加载:

loadNode(node, resolve) {
  if (node.level === 0) {
    return resolve([{ name: '根节点' }])
  }
  if (node.level > 3) return resolve([])

  setTimeout(() => {
    const data = Array.from({ length: 5 }).map((_, i) => ({
      name: `节点${node.level}-${i}`,
      leaf: node.level >= 2
    }))
    resolve(data)
  }, 500)
}

自定义样式和交互

通过CSS可以自定义树形菜单的外观:

.tree-node {
  padding: 5px 10px;
  cursor: pointer;
}
.tree-node:hover {
  background-color: #f5f5f5;
}
.tree-children {
  padding-left: 20px;
}

功能增强

实现常见功能如:

  • 复选框选择
  • 节点展开/折叠
  • 拖拽排序
  • 搜索过滤
  • 右键菜单

示例实现搜索过滤:

filterNode(value, data) {
  if (!value) return true
  return data.label.indexOf(value) !== -1
}

性能优化

对于大型树结构:

vue 树形菜单实现

  • 使用虚拟滚动
  • 实现节点懒加载
  • 避免不必要的重新渲染
export default {
  shouldComponentUpdate(nextProps) {
    return !shallowEqual(this.props.node, nextProps.node)
  }
}

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

相关文章

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展示…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导航…

vue键盘实现

vue键盘实现

监听键盘事件 在Vue中监听键盘事件可以通过v-on指令或@缩写实现。常见的键盘事件包括keydown、keyup和keypress。例如监听回车键事件: <template> &l…

vue博客实现

vue博客实现

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