vue3+elementui-plus实现无限递归菜单

效果图
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实现方式是:通过给定的数据结构层数来动态生成多级菜单

menu.vue

<template>
  <el-menu
      :default-active="activeIndex"
      class="el-menu-demo"
      mode="horizontal"
      @select="handleSelect"
      background-color="#f8f8f9"
      style="margin-top: 20px;margin-left: 1px;"
  >
    <Childrenmenu v-for="menuItem in menuItems" :key="menuItem.value" :item="menuItem" />
  </el-menu>
</template>

<script setup>
import Childrenmenu from "./childrenmenu";
const menuItems = [
	  {
	    value: '1',
	    label: '菜单1',
	    children: [
	      {
	        value: '1-1',
	        label: '子菜单1-1',
	        children: [
	          { value: '1-1-1', label: '子菜单1-1-1' },
	          { value: '1-1-2', label: '子菜单1-1-2' },
	        ],
	      },
	      { value: '1-2', label: '子菜单1-2' },
	    ],
	  },
	  {
	    value: '2',
	    label: '菜单2',
	    children: [
	      { value: '2-1', label: '子菜单2-1' },
	      {
	        value: '2-2',
	        label: '子菜单2-2',
	        children: [
	          { value: '2-2-1', label: '子菜单2-2-1' },
	          { value: '2-2-2', label: '子菜单2-2-2' },
	        ],
	      },
	    ],
	  },
	  {
	    value: '3',
	    label: '菜单3',
	    children: [
	      {
	        value: '3-1',
	        label: '子菜单3-1',
	        children: [
	          {
	            value: '3-1-1',
	            label: '子菜单3-1-1',
	            children: [
	              { value: '3-1-1-1', label: '子菜单3-1-1-1' },
	              { value: '3-1-1-2', label: '子菜单3-1-1-2' },
	            ],
	          },
	        ],
	      },
	    ],
	  },
	];
	
const handleSelect = async (key, keyPath) => {
	 console.log(key, keyPath)
}
</script>
childrenmenu.vue

<template>
  <template v-if="item.children">
    <el-sub-menu :index="item.value">
      <template #title>{{ item.label }}</template>
      <Childrenmenu v-for="childItem in item.children" :key="childItem.value" :item="childItem" />
    </el-sub-menu>
  </template>
  <template v-else>
    <el-menu-item :index="item.value">{{ item.label }}</el-menu-item>
  </template>
</template>

<script setup>
import { defineProps } from 'vue';

const props = defineProps(['item']);
</script>

<style scoped>

</style>

下面的方法可以实现重置菜单选项为默认项(需求场景:左侧菜单切换时,上方菜单就要重置为默认选项)

<el-menu
      :key="menuKey"
      :default-active="activeIndex"
      class="el-menu-demo"
      mode="horizontal"
      @select="handleSelect"
      background-color="#f8f8f9"
      style="margin-left: 1px;"
  >
    <Childrenmenu v-for="menuItem in menuItems" :key="menuItem.value" :item="menuItem" />
  </el-menu>

<script setup>
const menuKey = ref(0);
//监听切换事件
watch(() => stationsStore.stationId, (newValue, oldValue) => {
  menuKey.value += 1;
});

通过给el-menu添加:key="menuKey"实现。
实现原理::key=“menuKey” 是 Vue 中的一个特殊语法,用于控制组件的重新渲染。当一个组件的 key 值发生变化时,Vue 会认为这是一个新的组件实例,会强制重新创建和渲染这个组件。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 是一种流行的JavaScript 框架,用于构建用户界面。它具有许多强大的功能,可帮助我们开发出高效、可重用的代码。Element Plus 是一个非常受欢迎的基于Vue 3的UI组件库,它提供了丰富的UI组件,可以帮助我们快速构建漂亮且功能丰富的网页应用程序。 在Vue 3和Element Plus的结合中,代码自动生成是一个非常重要的功能。它可以减少开发人员手动编写重复代码的时间和努力。 对于代码自动生成,一种常见的方法是使用Vue CLI。我们可以使用Vue CLI创建一个基本的Vue 3项目,并选择Element Plus作为UI组件库。然后,我们可以使用Vue CLI提供的命令行工具来自动生成一些常用的代码模板。例如,我们可以使用命令来生成一个基本的表格页面,其中包含了Element Plus的表格组件和一些常见的数据操作功能,如增删改查等。这样,我们就不需要手动编写这些重复的代码,而是可以通过命令行工具自动生成。 另外,有一些第三方工具和插件可以帮助我们实现更高级的代码自动生成功能。例如,可以使用vue-element-admin这个开源项目,它提供了一个功能强大的后台管理系统模板,集成了Vue 3和Element Plus,同时还提供了许多常用的业务组件和页面模板。我们可以基于vue-element-admin进行二次开发,根据自己的业务需求来生成特定的代码模板。 总而言之,Vue 3和Element Plus的结合为我们提供了丰富的代码自动生成功能。无论是使用Vue CLI还是借助第三方工具和插件,我们都可以通过代码自动生成来提高开发效率,减少重复劳动。这将使我们能够更快地构建出高质量的Vue 3和Element Plus应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值