当前位置: 首页 > news >正文

VUE3—无限级菜单渲染

场景:

从后台api查询菜单数据,渲染到界面,比如后台管理系统的左侧的树形菜单,如果用v-for或者if去判断的话,如果层级很多的情况下,会造成代码冗余。所以这个时候可以使用组件的方式,通过组件内递归达到代码的简洁,也方便调用和修改

解决办法:

在项目components文件夹中创建文件夹menu,在menu文件夹下创建menuTree.vue文件。

menuTree.vue

<template><div><template v-for="item in props.menuList" :key="item.path"><el-sub-menu :index="item.path" v-if="item.children"><template #title><span>{{ item.name }}</span></template><!-- 如果有子菜单,则递归渲染 --><MenuTree :menuList="item.children"></MenuTree></el-sub-menu><!--      没有子菜单--><el-menu-item :index="item.path" v-if="!item.children" @click="$router.push({ path: item.path })"><span>{{ item.name }}</span></el-menu-item></template></div>
</template>
<script setup >
import { defineProps } from 'vue'
const props = defineProps(['menuList'])
</script>
<style>
</style>

在view文件夹下的页面中调用组件

index.vue

<template><el-menu class="el-menu-vertical-demo"><menuTree :menuList="menus"></menuTree></el-menu>
</template><script setup>
import {ref
} from 'vue'
import menuTree from "@/components/menu/menuTree.vue"
import {getMenuList,
} from "@/api/menu/index.js"// 模拟数据,实际生产环境为从后台api获取
const menus = ref([{"id": 110,"parent_id": 0,"name": "用户管理","icon": "el-icon-user-solid","rule_url": "user/default","children": [{"id": 50,"parent_id": 110,"name": "角色管理","icon": "el-icon-edit","rule_url": "admin/role"},{"id": 111,"parent_id": 110,"name": "管理员","icon": "el-icon-s-custom","rule_url": "admin/user"},{"id": 124,"parent_id": 110,"name": "本站用户","icon": "el-icon-user","rule_url": "user/custom"},{"id": 127,"parent_id": 110,"name": "第三方用户","icon": "el-icon-chat-dot-round","rule_url": "user/third"}]},{"id": 2,"parent_id": 0,"name": "系统设置","icon": "el-icon-edit","rule_url": "admin/setting"}
])
</script>
<style>
</style>

这样就可以快速进行菜单的渲染,而且支持无限级菜单渲染

原文地址:http://www.article.wang/portal/article/5

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++ 异步编程脉络与示例
  • web基础与HTTP
  • IEEE报告解读:存储技术发展趋势分析
  • 神经网络中的优化方法
  • 网络编程复习
  • 服务器模式
  • 【C++】-----多态及原理
  • 相机标定——小孔成像、相机模型与坐标系
  • 《数据结构(C语言版)第二版》第五章-树和二叉树(5.7 哈夫曼树及其应用)
  • 【AI学习】[2024北京智源大会]具身智能:具身智能关键技术研究:操纵、决策、导航
  • kafka 3.x 配置kerbos
  • 赋能未来园区:TSINGSEE视频AI智能管理平台如何引领园区管理智慧化转型
  • java selenium 设置代理,允许在其他环境中使用不同的IP访问
  • 分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测
  • C# 方法的定义
  • [LeetCode] Wiggle Sort
  • 《深入 React 技术栈》
  • es6
  • Hexo+码云+git快速搭建免费的静态Blog
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vultr 教程目录
  • 测试如何在敏捷团队中工作?
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 记一次和乔布斯合作最难忘的经历
  • 如何合理的规划jvm性能调优
  • 如何利用MongoDB打造TOP榜小程序
  • 算法-插入排序
  • 网页视频流m3u8/ts视频下载
  • 用Visual Studio开发以太坊智能合约
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #微信小程序:微信小程序常见的配置传旨
  • ( 10 )MySQL中的外键
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (AngularJS)Angular 控制器之间通信初探
  • (c语言)strcpy函数用法
  • (javascript)再说document.body.scrollTop的使用问题
  • (poj1.3.2)1791(构造法模拟)
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm码农论坛 毕业设计 231126
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转)VC++中ondraw在什么时候调用的
  • (转)平衡树
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET 8 跨平台高性能边缘采集网关
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 回调、接口回调、 委托
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET导入Excel数据
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)