vue3中利用路由信息渲染菜单栏
1. 创建路由时将路由信息对象进行抽离
将路由信息对象单独抽离到router/routes.ts文件
关键:利用路由元信息meta,定义3个属性
- hidden:控制当前路由是否显示在菜单栏中
- title:菜单拦名称
- icon:对应菜单名称前面的图标
//对外暴露配置路由(常量路由)
export const constantRout = [{path: '/screen',component: () => import('@/views/screen/index.vue'),name: 'Screen',meta: {hidden: false,title: '数据大屏',icon: 'Platform',},},{path: '/acl',component: () => import('@/layout/index.vue'),name: 'Acl',meta: {hidden: false,title: '权限管理',icon: 'Lock',},children: [{path: '/acl/user',component: () => import('@/views/acl/user/index.vue'),name: 'User',meta: {hidden: false,title: '用户管理',icon: 'User',},},{path: '/acl/role',component: () => import('@/views/acl/role/index.vue'),name: 'Role',meta: {hidden: false,title: '角色管理',icon: 'UserFilled',},},{path: '/acl/permission',component: () => import('@/views/acl/permission/index.vue'),name: 'Permission',meta: {hidden: false,title: '菜单管理',icon: 'Monitor',},},],},
]
在router/index.ts文件引入router.ts文件
import { createRouter, createWebHashHistory } from 'vue-router'
import { constantRoute } from './routes'
//创建路由器
const router = createRouter({//路由模式hashhistory: createWebHashHistory(),routes: constantRoute,//滚动行为scrollBehavior() {return {left: 0,top: 0,}},
})
export default router
2. 将路由信息对象挂载到pinia仓库中
将路由信息对象挂载到pinia仓库中,是为了数据共享,供组件使用
//引入路由(常量路由)
import { constantRoute } from '../../router/routes'
const useUserStore = defineStore('User', {state: (): userState => {return {token: GET_TOKEN(),// 存储路由信息用来遍历生成菜单结构menuRoutes: constantRoute, //仓库存储生成菜单需要数组(路由)}},
}
完成将路由信息挂载到pinia仓库中
3. 在组件中通过路由信息对象渲染菜单
Menu是封装的组件,接收父组件传递的userStore.menuRoutes也就是存放在pinia仓库中的路由信息对象
<!-- 展示菜单区域 --><el-scrollbar class="scrllbar"><el-menu background-color="#001529" text-color="white"><!-- 根据路由动态生成菜单 --><Menu :menuList="userStore.menuRoutes"></Menu></el-menu></el-scrollbar>
在子组件Menu中声明接收:
//通过props接收父组件传递的路由组件信息
defineProps(['menuList'])
Menu组件完整写法:
思路:通过路由信息对象中的children属性判断是否有子路由,如果有子路由,则继续判断子路由的个数,从而进行对应的判断处理
<template><!-- 根据路由来遍历左侧菜单展示信息 --><template v-for="(item, index) in menuList" :key="item.path"><!-- 没有子路由 --><template v-if="!item.children"><el-menu-itemv-if="!item.meta.hidden":index="item.path"@click="goRoute"><template #title><el-icon><component :is="item.meta.icon"></component></el-icon><span>{{ item.meta.title }}</span></template></el-menu-item></template><!-- 有子路由但是只有一个 --><template v-else-if="item.children && item.children.length == 1"><el-menu-itemv-if="!item.children[0].meta.hidden":index="item.children[0].path"@click="goRoute"><template #title><el-icon><component :is="item.children[0].meta.icon"></component></el-icon><span>{{ item.children[0].meta.title }}</span></template></el-menu-item></template><!-- 有子路由且个数大于一个 --><template v-if="item.children && item.children.length > 1"><el-sub-menu :index="item.path"><template #title><el-icon><component :is="item.meta.icon"></component></el-icon><span>{{ item.meta.title }}</span></template><Menu :menuList="item.children"></Menu></el-sub-menu></template></template>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'//通过props接收父组件传递的路由组件信息
defineProps(['menuList'])
let $router = useRouter()
const goRoute = (vc: any) => {//路由跳转$router.push(vc.index)
}
</script>
<script lang="ts">
// 当子路由个数大于等于一个时,并且或许子路由还有后代路由时。
// 这里我们使用了递归组件。递归组件需要命名(另外使用一个script标签,vue2格式)。
export default {name: 'Menu',
}
</script>
<style scoped lang="scss">
</style>
注意:在Menu组件中使用了Menu(递归组件),递归组件需要命名(另外使用一个script标签,vue2格式)。
export default {name: 'Menu',
}
注意:在el-menu-item组件中有一个click方法,对应一个函数,由element提供,会接收一个组件实例参数,并配合useRouter进行路由跳转
const goRoute = (vc: any) => {//路由跳转$router.push(vc.index)
}
相关文章:
vue3中利用路由信息渲染菜单栏
1. 创建路由时将路由信息对象进行抽离 将路由信息对象单独抽离到router/routes.ts文件 关键:利用路由元信息meta,定义3个属性 hidden:控制当前路由是否显示在菜单栏中title:菜单拦名称icon:对应菜单名称前面的图标 …...
Mysql每日一题(行程与用户,困难※)
今天给大家分享一个截止到目前位置,我遇到最难的一道mysql题目,非常建议大家亲手做一遍 完整代码如下,这道题的主要难点是它有两个外键,以前没遇到过,我也没当回事,分享一下错误经验哈 当时我写的where判断…...
adb 命令 查找启动的包名以及导出安装包
查看安卓内包名 adb 查看所有安装的包 adb shell pm list packages查看安装的第三方app的包名 adb shell pm list packages -3查看启动的app的包名 adb shell dumpsys activity top | find "ACTIVITY"adb shell dumpsys activity activities | findstr "Run…...
Flink_DataStreamAPI_输出算子Sink
Flink_DataStreamAPI_输出算子Sink 1连接到外部系统2输出到文件3输出到Kafka4输出到MySQL(JDBC)5自定义Sink输出 Flink作为数据处理框架,最终还是要把计算处理的结果写入外部存储,为外部应用提供支持。 1连接到外部系统 Flink的D…...
标准C++ 字符串
一、标准库中的字符串类型 在C中,字符串是一个非常重要的数据类型,用于表示和处理文本信息。C提供了多种方式来处理字符串,每种方式都有其特点和适用场景。以下是几种常见的字符串类型及其用法: 1. C 风格字符串 (char* 或 char…...
时序预测:多头注意力+宽度学习
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
day06(单片机)IIC+STH20
目录 IICSHT20 I2C基础简介 为什么I2C需要使用上拉电阻? I2C特点 时序图分析 起始信号与终止信号 数据传输时序 字节传输和应答信号 I2C寻址 主机给从机发送一个字节 主机给从机发送多个字节 主机从从机接收一个字节 主机从从机接收多个字节 I2C寄存器 I2C_RXDR&…...
Bugku CTF_Web——文件上传
Bugku CTF_Web——文件上传 进入靶场 My name is margin,give me a image file not a php抓个包上传试试 改成png也上传失败 应该校验了文件头 增加了文件头也不行 试了一下 把文件类型改成gif可以上传 但是还是不能连接 将Content-Type改大小写 再把文件后缀名改成php4 成…...
C#版使用融合通信API发送手机短信息
目录 功能实现 范例运行环境 实现范例 类设计 类代码实现 调用范例 总结 功能实现 融合云通信服务平台,为企业提供全方位通信服务,发送手机短信是其一项核心功能,本文将讲述如何使用融合云服务API为终端手机用户发送短信信息…...
人工智能:重塑医疗、企业与生活的未来知识管理——以HelpLook为例
一、医疗行业:AI引领的医疗革新 随着人工智能(AI)技术的持续飞跃,我们正身处一场跨行业的深刻变革之中。在医疗健康的广阔舞台上,人工智能技术正扮演着日益重要的角色。它不仅能够辅助医生进行病例的精准诊断…...
MVVM(Model-View-ViewModel)模型
MVVM(ModelViewViewModel)模型是一种常用于软件开发中的架构模式,尤其在前端框架(如 Vue.js、React、Angular)中被广泛应用。它将程序的用户界面与业务逻辑分离,便于维护和扩展。 MVVM 的三个组成部分 1. …...
权限系统:权限应用服务设计
今天聊聊权限系统的应用服务设计。 从业务需求的角度来看,权限系统需要解决两个核心问题: 1、菜单渲染与动态展示 当用户成功登录并接入系统后,系统需要动态获取并展示该用户有权限访问的菜单项。 这一过程涉及前端系统与权限系统的交互。前端…...
Android音频架构
音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量。响度与声波的振幅有直接关系。 音调(Pitch) 音调与声音的频率有关系,当声音的频率越大时,人耳所感知到的音调就越高&a…...
AI 智享直播:开启直播新篇,引领未来互动新趋势!
在数字化浪潮席卷全球的今天,AI技术正以不可阻挡之势渗透进我们生活的方方面面,从智能家居到自动驾驶,从医疗健康到金融服务,无一不彰显着其强大的影响力和无限的潜力。而在这一波科技革新的洪流中,直播行业也迎来了前…...
【AIGC】国内AI工具复现GPTs效果详解
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 💯前言💯本文所要复现的GPTs介绍💯GPTs指令作为提示词在ChatGPT实现类似效果💯国内AI工具复现GPTs效果可能出现的问题解决方法解决后的效果 …...
Charles抓https包-配置系统证书(雷电)
1、导出证书 2、下载 主页上传资源中有安装包,免费的 openssl 安装教程自己搜 openssl x509 -subject_hash_old -in charles.pem 3、修改证书名、后缀改成点0 雷电打开root和磁盘写入 4、导入雷电证书根目录 证书拖进去,基本就完成了ÿ…...
在卷积神经网络中真正占用内存的是什么
在卷积神经网络(CNN)中,占用内存的主要部分包括以下几个方面: 1. 模型参数(Weights and Biases) CNN 中的权重和偏置(即模型的参数)通常是占用内存的最大部分。具体来说࿱…...
2024 ECCV | DualDn: 通过可微ISP进行双域去噪
文章标题:《DualDn: Dual-domain Denoising via Differentiable ISP》 论文链接: DualDn 代码链接: https://openimaginglab.github.io/DualDn/ 本文收录于2024ECCV,是上海AI Lab、浙江大学、香港中文大学(薛天帆等…...
Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!
作者:来自 Elastic Platform Product Team Elastic Search AI 平台(Elasticsearch、Kibana 和机器学习)的 8.16 版本包含大量新功能,可提高性能、优化工作流程和简化数据管理。 使用更好的二进制量化 (Better Binary Quantizatio…...
Linux 抓包工具 --- tcpdump
序言 在传输层 Tcp 的学习中,我们了解了 三次握手和四次挥手 的概念,但是看了这么多篇文章,我们也只是停留在 纸上谈兵。 欲知事情如何,我们其实可以尝试去看一下具体的网络包的信息。在这篇文章中将向大家介绍,在 L…...
OnTopReplica组切换模式揭秘:自动轮换多个监控窗口的完整指南
OnTopReplica组切换模式揭秘:自动轮换多个监控窗口的完整指南 【免费下载链接】OnTopReplica A real-time always-on-top “replica” of a window of your choice (on Windows). 项目地址: https://gitcode.com/gh_mirrors/on/OnTopReplica OnTopReplica是一…...
C# 工业级温度监控软件:支持多PLC通信与实时曲线绘制
前言工业自动化领域,温度监控是保障生产安全与产品质量的核心环节。面对多台设备分散、数据孤岛严重的现状,开发一套高效、可视化的上位机系统显得尤为重要。本文将详细介绍一款基于 WinForms 与 S7.Net 开发的温度监控系统。该系统不仅实现了对多台西门…...
CVPR/ICML/TMI顶会风向标:医学图像分割三大落地范式,从模型精调到临床闭环
1. 医学图像分割的临床落地挑战与范式转变 医学图像分割作为AI在医疗领域最成熟的应用之一,正经历着从实验室精度竞赛到临床实用落地的关键转型。我在参与多家三甲医院PACS系统智能化改造时发现,临床医生对算法的需求呈现明显的"三高"特征&…...
从素材到成片:AI 一站式极速输出——影视创作的新时代革命
在数字化浪潮席卷全球的今天,影视创作领域正经历着前所未有的变革。传统影视制作流程繁琐复杂,从素材采集、剪辑、特效添加到成片输出,往往需要耗费大量的人力、物力和时间。然而,随着人工智能(AI)技术的飞…...
如何提升网盘下载效率:直链解析工具使用指南
如何提升网盘下载效率:直链解析工具使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改(改自6.1.4版本) ,自用,去推广,无…...
3步掌握Buzz字幕智能分割:从杂乱时间戳到专业级字幕的技术实现
3步掌握Buzz字幕智能分割:从杂乱时间戳到专业级字幕的技术实现 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz Bu…...
探索Lumerical建模计算可调谐光学手性
Lumerical建模计算可调谐光学手性在光学领域,可调谐光学手性是一个极具吸引力的研究方向。而Lumerical作为一款强大的光学仿真软件,为我们深入探究这一领域提供了有力工具。 什么是可调谐光学手性 光学手性简单来说,描述的是光与物质相互作用…...
AtlasOS终极指南:专业解决Windows安装错误2502/2503的完整方案
AtlasOS终极指南:专业解决Windows安装错误2502/2503的完整方案 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trendi…...
什么是 Harness Engineering?把 Prompt、Workflow、Eval 串成系统的那层骨架
点击上方 前端Q,关注公众号回复加群,加入前端Q技术交流群上一篇我们先把问题抛出来了: 为什么现在大家都在聊 Agent、Workflow、AI Coding,可真正决定系统上限的,往往不是模型本身,而是模型外那层工程骨架。…...
从零开始:用CJQT构建跨平台数据可视化应用的入门教程
从零开始:用CJQT构建跨平台数据可视化应用的入门教程 【免费下载链接】CJQT 仓颉语言对qt封装库 项目地址: https://gitcode.com/Cangjie-TPC/CJQT 你是否在寻找一个能让数据可视化开发变得简单的开源框架?是否因复杂的跨平台适配问题而束手无策&…...
