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

这篇具有很好参考价值的文章主要介绍了vue3+elementui-plus实现无限递归菜单。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果图
vue3+js elementplus的menu菜单无限,elementui,vue.js,前端

vue3+js elementplus的menu菜单无限,elementui,vue.js,前端

vue3+js elementplus的menu菜单无限,elementui,vue.js,前端

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

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 会认为这是一个新的组件实例,会强制重新创建和渲染这个组件。文章来源地址https://www.toymoban.com/news/detail-856950.html

到了这里,关于vue3+elementui-plus实现无限递归菜单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3+ts+elementui-plus二次封装弹框

    一、弹框组件BaseDialog

    2024年02月15日
    浏览(50)
  • vue3项目创建(vite3+ts+elementui-plus)

    目的:vue3+vite+ts 安装依赖,安装vite的工具 Vite下一代的前端工具链为开发提供极速响应v4.3 创建工程 –template vue-ts 后面的是配置模板,有很多,也有react,官网有介绍 启动工程 安装路由 配置vite-env.d.ts 为了让ts识别.vue文件 安装element-plus 注意vue3用的是element-plus别装错版本了

    2024年02月16日
    浏览(54)
  • VUE3 + Elementui-Plus 之 树形组件el-tree 一键展开(收起);一键全选(不全选)

    实现步骤: tree组件部分: ts部分: 页面效果: 默认状态 展开状态 折叠状态 全选状态 全不选状态 注意:以上方法会展开或折叠所有节点;全选或全不选节点。 问题:数据量过大以上操作会有明显卡顿;有高效解决方法的朋友可以交流。

    2024年04月11日
    浏览(46)
  • Vue3后台管理系统Element-plus_侧边栏制作_无限递归

    在home.view中添加代码  2 创建一个全局组件  效果如图

    2024年02月09日
    浏览(41)
  • vue3+element-plus 通过v-infinite实现下拉滚动无限加载

    v-infinite官网 v-infinite-scroll无限滚动组件使用详解  官网给到的基础案例: 自己写了一个简单的demo: 当使用v-infinite时,控制台会报错:  原因: 官方上的Issues解释是需要nextTick()之后再去显示 解决方法是组件挂载完成再去显示el-select组件 所以在上面demo中select组件加了v-if,

    2024年02月09日
    浏览(52)
  • 【前端vue升级】vue2+js+elementUI升级为vue3+ts+elementUI plus

    gogo code 是一个基于 AST (源代码的抽象语法结构树状表现形式)的 JavaScript/Typescript/HTML 代码转换工具,可以用它来构建一个代码转换程序来帮助自动化完成如框架升级、代码重构、多平台转换等工作。 当前 GoGoCode 支持解析和操作如下类型的代码: ○JavaScript(JSX) ○Typescript

    2024年02月12日
    浏览(54)
  • elementUi重置Select选择器样式、option、deep、vue3、plus

    样式标签属性为 style scoped lang=\\\"scss\\\"/style

    2024年02月14日
    浏览(43)
  • Vue3:Elemenu-Plus递归型菜单组件封装(2)

            在上一篇文章中,以Vue2的选项式 API风格,封装了递归型菜单组件,但是这其中存在着一些问题,例如:         【1】子组件menuList.vue中,通过this.$emit()方式定义的事件,在Vue3组合式API风格父组件中可能会被执行多次。之所以说是可能,是因为我这测试中确实遇

    2024年02月13日
    浏览(48)
  • 利用级联选择器实现省市区三级联动【vue + elementUI Plus | uViewUI】

    行政区划代码数据下载 github 链接 首先获得省市区三级联动数据 pca-code.json 放置在项目文件夹内 数据格式如图: elementUI 级联选择器 props elementui 级联选择器api提供 props 将value,label,children指定为当前数据的自定义属性值 通过 :props=“cityProps” 2. getCheckedNodes 绑定值变化时触

    2024年02月09日
    浏览(61)
  • 基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 高校汉服租赁网站的 设计与实现

    高校汉服租赁网站分为普通用户以及管理员两类                  普通用户: 注册、登录系统、查看汉服首页发帖公告信息、                                 交流论坛(发帖、查看帖子、评论)、                                 公告

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包