vue3实现动态侧边菜单栏的几种方式总结

基于自建json数据的动态侧边菜单栏 

后端接口json数据

src/api/menuList.js

const  menuList = [{url: '',name: '人员管理',icon: 'icon-renyuan',menuId: 1,children: [{url: '/user',name: '用户管理',icon: 'icon-jurassic_user',menuId: 1001,children: []},{url: '/role',name: '角色管理',icon: 'icon-jiaose',menuId: 1002,children: []}]},{url: '/device',name: '设备管理',icon: 'icon-shebei',menuId: 2}]
export default menuList;

home.vue页面上面显示该类型的菜单

在home.vue页面中import 这个文件 

遍历数组中的menulist 中的json数据,因为只遍历到第二层 因此只支持两层目录 即父-子

<template><div class="common-layout"><--! 基于elementplus的侧边栏标签--><el-aside width="400px"><el-row class="tac"><el-col :span="12"><el-menudefault-active="2"class="el-menu-vertical-demo":router="true"><el-sub-menu index="1" v-for="item in menuList" :key="item.id"><!--一级模板区域 --><template #title><el-icon class="item.iconCls"/><span>{{ item.name}}</span></template><el-menu-item :index="'/'+subItem.path" v-for="subItem in item.children" :key="item.id"><template #title><span>{{subItem.name}}</span></template></el-menu-item></el-sub-menu></el-menu></el-col></el-row></el-aside></el-container></el-container></div>
</template>
<script>
import menuList from "@/api/mockdata/menList";  //根据自己的路径来
export default {name: "Home",data(){return {menuList}},
}
</script>
<style >
</style>

效果图

基于后端接口数据 实现动态侧边菜单栏 vue3+elementplus

后端菜单接口数据

目录结构为 父目录 系统管理  子目录  广告管理 APP上传。 遍历json数据  在v-for页面显示 name 名称

http://localhost:8000/api/menu

[{"id": 6,"url": "/","path": "/home","component": "Home","name": "系统管理","iconCls": "fa fa-windows","enabled": true,"children": [{"id": 30,"url": null,"path": "/sys/ad","component": "SysAd","name": "广告管理","iconCls": "fa fa-ad","meta": null,"parentId": 6,"enabled": true,"children": null,"roles": null},{"id": 7,"url": null,"path": "/sys/app","component": "SysApp","name": "App上传","iconCls": "fa-solid fa-circle-arrow-up","meta": null,"parentId": 6,"enabled": true,"children": null,"roles": null}],"roles": null}
]

在 home.vue中 显示此json数据形成的菜单 

vue3包含的data() mounted() methods()  方法被一个 setup方法全包了

ref可以是对象也可以是变量 reactive中必须是对象。。

ref使用变量 不管是获取还是使用 都需要加上 .value 

<template><div class="common-layout"><el-container><el-aside width="400px"><el-row class="tac"><el-col :span="12"><el-menudefault-active="2"class="el-menu-vertical-demo":router="true"><el-sub-menu index="1" v-for="item in menuList" :key="item.id"><!--一级模板区域 --><template #title><el-icon class="item.iconCls"/><span>{{ item.name}}</span></template><!-- 二级目录遍历 json中的children 显示name:中的内容--><el-menu-item :index="'/'+subItem.path" v-for="subItem in item.children" :key="item.id"><template #title><span>{{subItem.name}}</span></template></el-menu-item></el-sub-menu></el-menu></el-col></el-row></el-aside></el-container></el-container></div>
</template><script>
import { Document, Location, Setting, Burger} from "@element-plus/icons-vue";
import axios from "axios";
import {onMounted,ref } from 'vue'
import  {useStore} from "vuex";
export default {name: "Home",components: {Burger, Setting, Document, Location},setup() {// vue3推荐使用ref 实现响应式数据 数据实时显示  将后端接受的数据赋值给ref const menuList = ref();onMounted(()=>{axios.get("/api/menu").then(res =>{console.log("onMounted")const data = res.dataconsole.log(data)menuList.value = data})})return {menuList}},}
</script><style >
.homeHeader{background-color: #04befe;/*弹性展示*/display: flex;/* 居中对齐弹性盒子的各项 div 元素*/align-items: center;}.mainTitle{/* 规定元素中文本的水平对齐方式 居中*/text-align: center;/* 颜色为深空色*/color: deepskyblue;/* 字体大小*/font-size: 30px;/* 距离顶部的距离为 20px 数值越大下降位置越多*///padding-top: 20px;
}
.headerTitle{/*字体大小*/font-size: 20px;/* 字体颜色*/color: #fffff9;
}
//标签换行样式 vue3中不支持标签页换行
.text-wrapper {display: inline-block;word-break: break-all;word-wrap: break-word
}
</style>

效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/409589.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt第二周周二作业

代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void paintEvent(…

smartgit选择30天试用后需要输入可执行文件

突然有一天smartgit提示到期了&#xff0c;我按照以往那样删除license和preferences文件后&#xff0c;选择30天试用&#xff0c;弹出了需要选择git可执行文件。 我尝试选择了我的git.exe&#xff0c;发现根本不行&#xff0c;提示让我执行下git --version 执行过后提示我的.gi…

力扣hot100 颜色分类 双指针 滚动赋值

Problem: 75. 颜色分类 文章目录 思路解题方法复杂度Code&#x1f496; 超简洁版 思路 解题方法 描述你的解题方法 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution { public void sortColors(int[] nums){int n nums.length…

单列的堆叠柱状图

目的 MSingleColumnStackBarChart类被设计用于创建只有单列的堆叠柱状图&#xff0c;用于血糖数据的统计。以下是封装这个类的目的的详细描述&#xff1a; 抽象复杂性&#xff1a; 通过创建MSingleColumnStackBarChart类&#xff0c;你将复杂的MPAndroidChart库的使用和配置封…

NET Core发布 HTTP Error 500.31 - Failed to load ASP.NET Core runtime

记录一下踩过的坑&#xff1a; 首先&#xff0c;不论是500.31还是500.30 &#xff0c;首先确保安装了三个文件 1.NET Core RunTime 2.NET SDK 3.NET Hosting 其次&#xff0c;确保三个文件的版本一致&#xff0c;如下&#xff1a; 要装就统一装同一个大版本&#xff0c;不要东…

Ubuntu12.0安装g++过程及其报错

Ubuntu12.0安装g过程及其报错 https://blog.csdn.net/weixin_51286763/article/details/120703953 https://blog.csdn.net/dingd1234/article/details/124029945 2.报错二&#xff1a; [41/80] Building CXX object absl/synchronization/CMakeFiles/graphcycles_internal.di…

VMware Vsphere 日志:用户 dcui@127.0.01已以vMware-client/6.5.0 的身份登录

一、事件截图&#xff1a; 二、解决办法 原因&#xff1a; 三、解决办法 1.开启锁定模式 2.操作 1、从清单中选择您的 ESXi 主机&#xff0c;然后转至管理 > 设置 > 安全配置文件&#xff0c;然后单击锁定模式的编辑按钮 2、在打开的锁定模式窗口中&#xff0c;选中启…

信驰达科技参与《汽车玻璃集成UWB数字钥匙发展研究白皮书》编制工作

为进一步探索汽车数字钥匙技术路线及开发思路&#xff0c;中国智能网联汽车产业创新联盟&#xff08;CAICV&#xff09;、福耀玻璃工业集团股份有限公司联合发起了《汽车玻璃集成UWB数字钥匙发展研究白皮书》研究工作。 2023年12月20日&#xff0c;由中国智能网联汽车产业创新…

C++ 设计模式之桥接模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【简介】什么是桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是⼀种结构型设计模式&#xff0c;它的U…

verilog编程题

verilog编程题 文章目录 verilog编程题序列检测电路&#xff08;状态机实现&#xff09;分频电路计数器译码器选择器加减器触发器寄存器 序列检测电路&#xff08;状态机实现&#xff09; module Detect_101(input clk,input rst_n,input data,o…

基于变换域的模版匹配

模板匹配原理 图像的空间域与其他域之间的变换&#xff0c;如傅里叶变换&#xff0c;小波变换&#xff0c;轮廓波变换&#xff0c;剪切波变换等&#xff0c;实际上是图像在其他坐标领域中的表现。在空间域中&#xff0c;图像的信息是像素值和坐标位置&#xff1b;在其他域中&a…

Spring之AOP源码(二)

书接上文 文章目录 一、简介1. 前文回顾2. 知识点补充 二、ProxyFactory源码分析1. ProxyFactory2. JdkDynamicAopProxy3. ObjenesisCglibAopProxy 三、 Spring AOP源码分析 一、简介 1. 前文回顾 前面我们已经介绍了AOP的基本使用方法以及基本原理&#xff0c;但是还没有涉…