当前位置:首页 > VUE

vue实现级联菜单

2026-03-09 04:09:51VUE

Vue 实现级联菜单的方法

使用 Element UI 的 Cascader 组件

安装 Element UI 后,可以直接使用其提供的 Cascader 组件实现级联菜单功能。Element UI 的 Cascader 支持动态加载、多选、搜索等功能。

<template>
  <el-cascader
    v-model="selectedOptions"
    :options="options"
    @change="handleChange"
  ></el-cascader>
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      options: [
        {
          value: 'province1',
          label: '省份1',
          children: [
            {
              value: 'city1',
              label: '城市1'
            }
          ]
        }
      ]
    }
  },
  methods: {
    handleChange(value) {
      console.log(value)
    }
  }
}
</script>

自定义递归组件实现

如果需要更灵活的定制,可以通过递归组件的方式手动实现级联菜单。创建一个可递归调用的子菜单组件,根据数据动态渲染层级结构。

<template>
  <div class="cascader-menu">
    <div
      v-for="item in options"
      :key="item.value"
      @mouseenter="showChildren(item)"
    >
      {{ item.label }}
      <div v-if="item.children && activeItem === item" class="sub-menu">
        <cascader-menu :options="item.children" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'CascaderMenu',
  props: {
    options: Array
  },
  data() {
    return {
      activeItem: null
    }
  },
  methods: {
    showChildren(item) {
      this.activeItem = item
    }
  }
}
</script>

使用第三方库 vue-cascader

vue-cascader 是一个专门为 Vue 设计的级联选择器组件,提供了丰富的配置选项和事件支持。

安装:

npm install vue-cascader

使用示例:

<template>
  <vue-cascader
    :options="options"
    v-model="selectedValues"
    :props="props"
  />
</template>

<script>
import VueCascader from 'vue-cascader'

export default {
  components: {
    VueCascader
  },
  data() {
    return {
      selectedValues: [],
      props: {
        value: 'id',
        label: 'name',
        children: 'children'
      },
      options: [
        {
          id: 1,
          name: '一级菜单',
          children: [
            {
              id: 2,
              name: '二级菜单'
            }
          ]
        }
      ]
    }
  }
}
</script>

动态加载数据实现

对于数据量大的场景,可以采用动态加载的方式,只有当用户展开某一级时才加载对应数据。

<template>
  <el-cascader
    :props="props"
  ></el-cascader>
</template>

<script>
export default {
  data() {
    return {
      props: {
        lazy: true,
        lazyLoad(node, resolve) {
          const { level } = node
          setTimeout(() => {
            const nodes = Array.from({ length: level + 1 })
              .map(item => ({
                value: ++id,
                label: `选项${id}`,
                leaf: level >= 2
              }))
            resolve(nodes)
          }, 1000)
        }
      }
    }
  }
}
</script>

样式定制技巧

级联菜单的样式可以通过以下方式定制:

/* 修改 Element UI Cascader 样式 */
.el-cascader-menu {
  min-width: 200px;
}

.el-cascader-menu__item {
  padding: 8px 20px;
}

/* 自定义组件的样式 */
.cascader-menu {
  position: relative;
  display: inline-block;
}

.sub-menu {
  position: absolute;
  left: 100%;
  top: 0;
  background: #fff;
  border: 1px solid #ddd;
}

性能优化建议

对于大型数据集,建议采用虚拟滚动技术或动态加载方式。避免一次性渲染所有层级的数据,可以显著提高性能。

vue实现级联菜单

使用 Element UI 的 Cascader 时,可以通过 props 配置项的 checkStrictly 来控制是否严格遵循父子不互相关联的选择模式。

标签: 菜单级联
分享给朋友:

相关文章

vue 实现级联

vue 实现级联

Vue 实现级联选择器 级联选择器(Cascader)常用于省市区选择、分类选择等场景。Vue 中可以通过 Element UI、Ant Design Vue 等 UI 库实现,也可以手动封装。 使…

css制作二级菜单

css制作二级菜单

使用纯CSS制作二级菜单 通过CSS的:hover伪类和子选择器实现二级菜单的显示与隐藏。以下是一个典型的结构和样式示例: HTML结构 <nav class="menu"> &l…

css制作菜单

css制作菜单

CSS 制作菜单的方法 使用 CSS 可以制作多种风格的菜单,包括水平菜单、垂直菜单、下拉菜单等。以下是几种常见的实现方式。 水平菜单 水平菜单通常用于导航栏,可以通过 display: inlin…

vue实现菜单管理

vue实现菜单管理

Vue 实现菜单管理方案 方案一:基于路由的动态菜单 通过 Vue Router 的路由配置自动生成菜单结构,适用于权限管理系统。在路由元信息(meta)中添加菜单相关配置: const route…

vue如何实现级联

vue如何实现级联

实现级联选择器的基本方法 在Vue中实现级联选择器通常使用现成的组件库或自定义组件。以下是两种常见方式: 使用Element UI的Cascader组件 安装Element UI后,直接使用el-c…

vue实现菜单联动

vue实现菜单联动

实现菜单联动的基本思路 在Vue中实现菜单联动通常涉及父子组件通信或状态管理。核心是通过数据绑定和事件监听,确保一个菜单的选择能触发另一个菜单的更新。 数据准备与结构设计 定义菜单数据时,建议使用嵌…