当前位置:首页 > 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实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signature_p…

vue  实现tab

vue 实现tab

实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过动态组件或条件渲染完成。以下是两种常见方法: 使用 v-if 或 v-show 实现条件渲染 通过绑定 currentTab 变量…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> <…

vue实现tabs

vue实现tabs

Vue实现Tabs组件的方法 使用动态组件和v-for指令 在Vue中创建Tabs组件可以通过动态组件和v-for指令实现。定义一个包含tab标题和内容的数组,使用v-for渲染tab标题,并通过点击…

vue实现hexo

vue实现hexo

Vue 集成 Hexo 的实现方法 Hexo 是一个静态博客框架,而 Vue 是一个前端框架。将 Vue 集成到 Hexo 中可以通过以下方式实现: 在 Hexo 中使用 Vue 组件 通过 Hex…

vue实现联动

vue实现联动

Vue 实现联动效果 联动效果通常指多个组件或表单元素之间相互影响,例如选择省份后动态加载城市列表。Vue 提供了多种方式实现联动,包括数据绑定、计算属性、侦听器等。 数据驱动联动 通过 Vue 的…