vite+vue3实现动态路由

news2024/11/24 12:07:21

在做这个动态路由的时候踩了很多坑,其中大部分是粗心了

动态菜单主要是导入的方式 import.meta.glob

参考:功能 | Vite 官方中文文档

1、多层路由渲染(用3层路由做demo)

拿到接口的数据是后台直接处理好的结构,但是在addRoute的时候发现其他层没有添加上,这个地方就处理成一级目录先把动态路由添加上再说

const whiteList = ['/login']// 免登录白名单
const modules = import.meta.glob('../views/**/*.vue')

router.beforeEach((to, from, next) => {
	document.title = `${to.meta.title}`
  const token=Cookies.get('token')
  if(token){
    if (to.path === '/login') {
      next()
    }else{

      if(store.state.menulist.length==0){
        $api.getUserData().then(res =>{
          if(res){
            if(res.code==0){
              let menulist=[];
              let newChildren=[];
             for(let i=0;i<res.data.menuWithCurrentRoleList.length;i++){
                let item=res.data.menuWithCurrentRoleList[i];
                let children=[];
                
                if(item.subMenuList){
                  for(let j=0;j<item.subMenuList.length;j++){
                    let items=item.subMenuList[j]
                    items.path=items.router;
                    let asarr=[];
                    if(items.subMenuList){
                      for(let jj=0;jj<items.subMenuList.length;jj++){
                        let as=items.subMenuList[jj]
                        
                        let aobjs={
                          "path":as.href, 
                          "name":as.moduleName, 
                          children:[],
                          subMenuList:as.subMenuList,
                          parent:3,
                          "meta":{
                            "title":as.name,
                          },
                          // component: () => import(`../views${as.href}.vue`),/**这个静态路由只能本地使用**/
                          component: modules[`../views${as.href}.vue`],
                        }
                       
                        asarr.push(aobjs)
                        newChildren.push(aobjs)
                      }
                    }
                    let aobj={
                      "path":items.href, 
                      "name":items.moduleName, 
                      children:[],
                      parent:2,
                      subMenuList:asarr,
                      "meta":{
                        "title":items.name,
                      },
                      //  component: () => import(`../views${items.href}.vue`),
                      component: modules[/* @vite-ignore */`../views${items.href}.vue`],
                    }

                    children.push(aobj)
                    newChildren.push(aobj)
                  }
                }
                let obj={
                    "path":item.href, 
                    "name":item.moduleName, 
                    children:[],
                    parent:1,
                    subMenuList:children,
                    "meta":{
                      "title":item.name,
                    },
                    // component: () => import(`../views${item.href}.vue`),
                    component: modules[`../views${item.href}.vue`],
                  }
                  // console.log(obj.component,'====111===',item.href)
                
                menulist.push(obj)
                newChildren.push(obj)
              }

              store.dispatch('setMenulist',newChildren).then(() => {
                newChildren.forEach((route) => {
                  router.addRoute('home',{ ...route });
                });
                next({ ...to, replace: true });
              }); 
            }
          }
        })
      }else{
        next()
      }
      
    }
  }else{
    if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入
      next()
    } else {
      next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
    }
  }
})

说明:

import.meta.glob('../views/**/*.vue')

一个*表示文件,两个**表示文件夹,.vue是说这个下面的所有.vue文件

我当时遇到的问题有点奇怪,有的路由菜单可以点击,有的不可以,我当时粗心有2点。

1、文件名大小写被我忽略了,没有注意到,所以,一定要注意文件名有没有错

2、使用modules的时候我第三层的前面加了()=>然后在打印component的时候, 打印出来的是变量名

第一个框起来的是路径错误,我没有这个文件

第二个框起来的是正确的,路径正确也可以正常访问

第三个错误的,因为我加了component:()=>modules,实际不需要加,我当时没有注意到这个地方,找了好久的问题 

最后:如果有好的多层动态菜单处理方法,大家可以告诉我呀。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3_CSS层叠样式表基础

第3章-CSS层叠样式表基础 学习目标(Objective) 掌握标签选择器的使用掌握类选择器的使用了解id选择器和通配符选择器掌握font属性和color属性的应用 1.HTML的局限性 如果要改变下高度或者变一个颜色&#xff0c;就需要大量重复操作 总结&#xff1a; HTML满足不了设计者的需…

OpenCL学习笔记(三)手动编译开发库(win10+mingw64)

前言 有的小伙伴仍然在使用mingw编译器&#xff0c;这时只能重新编译opencl的sdk库。本文档简单记录下win10下&#xff0c;使用mingw11.20编译的过程&#xff0c;有需要的小伙伴可以参考下 一、安装所需软件 1.安装git&#xff0c;教程比较多&#xff0c;不再重复 2.安装cm…

放大镜是否可以会聚光线?为什么?

放大镜是否可以会聚光线&#xff1f;为什么&#xff1f; 实验日期&#xff1a;2019年8月24日 操作用具&#xff1a;放大镜&#xff0c;手电筒&#xff0c;一张白纸 猜 测&#xff1a;放大镜可以会聚光线&#xff0c;因为放大镜是凸透镜&#xff0c;凸透镜可以会聚光线。 实…

C#-快速剖析文件和流,并使用

目录 一、概述 二、文件系统 1、检查驱动器信息 2、Path 3、文件和文件夹 三、流 1、FileStream 2、StreamWriter与StreamReader 3、BinaryWriter与BinaryReader 一、概述 文件&#xff0c;具有永久存储及特定顺序的字节组成的一个有序、具有名称的集合&#xff1b; …

Nacos 2.3.0 正式发布,堪称最强!

2023年12月7日&#xff0c;Nacos 2.3.0&#xff0c;正式发布了它的最新版本。经过一个多月社区的精心测试与优化&#xff0c;新版本在功能和性能上均有显著提升。 Nacos 2.3.0的发布&#xff0c;可以说是一场关于配置管理的小型革命。它不仅仅是一个版本的迭代&#xff0c;更是…

Mybatis XML 多表查询

这篇需结合 <<Mybatis XML 配置文件>>那一篇博客一起看 工作中尽量避免使用多表查询,尤其是对性能要求非常高的项目 我们之前建了个用户表(代码在Mybatis XML配置文件那篇博客里),这次再建一个文章表,代码如下 : -- 创建⽂章表 DROP TABLE IF EXISTS articleinf…

armbian系统安装和卸载snmp服务(SNMPV2操作版本)

文章目录 说明基知干净卸载snmp服务并清除配置文件安装SNMPSNMPV2远程连接配置基本设备信息查询问题Errors were encountered while processing: snmpdCannot adopt OID…… 说明 由于各位小伙伴&#xff0c;可能在安装过程中出现意外或者其他情况&#xff0c;本文先说明卸载步…

金融专题 | 对复杂的金融工具进行设计、定价和对冲分析

金融行业使用 Financial Instruments Toolbox™ 执行现金流建模和收益率曲线拟合分析、计算价格和敏感度、查看价格演变&#xff0c;并使用普通股权和固定收益建模方法执行对冲分析。 借助该工具箱&#xff0c;您可以创建新的金融工具类型&#xff0c;使用参数拟合模型和息票剥…

预训练--微调

预训练–微调 一个很简单的道理&#xff0c;如果我们的模型是再ImageNet下训练的&#xff0c;那么这个模型一定是会比较复杂的&#xff0c;意思就是这个模型可以识别到很多种类别的即泛化能力很强&#xff0c;但是如果要它精确的识别是否某种类别&#xff0c;它的表现可能就不…

html、css类名命名思路整理

开发页面时&#xff0c;老是遇到起名问题&#xff0c;越想越头疼&#xff0c;严重影响开发进度&#xff0c;都是在想名字&#xff0c;现在做一下梳理&#xff0c;统一一下思想&#xff0c;希望以后能减少这块的痛苦。 命名规则 [功能名称]__[组成部分名称]--[样式名称] 思路…

小红书自动点赞工具,其成功分享与引流攻略从入门到精通

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、小红书引流的优势 小红书作为一个社交电商平台&#xff0c;具有巨大的引流潜力。其独特的UGC&#xff08;用户生成内容&#xff09;模式使得用户可以轻松地分享自己的购物心得…

python主流开发工具排名,python开发工具有哪些

本篇文章给大家谈谈python的开发工具软件有哪些&#xff0c;以及python主流开发工具排名&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 python中用到哪些软件 一、Python代码编辑器1、sublime Textsublime Text是一款非常流行的代码编辑器&#xff0c;支持P…

Python渗透测试——一、数据包的编辑工具——Scapy

Python渗透测试 一、Scapy简介二、Scapy中的分层结构三、Scapy中的常用函数四、在Scapy 中发送和接收数据包五、Scapy 中的抓包函数 一、Scapy简介 提到数据包(这里泛指帧、段和报文等)的构造&#xff0c;我们首先需要了解协议和分层这两个概念。在“互联世界的规则一协议”中…

概率论之 证明 正态分布的上a 分位点的对称的性质

公式(Z(a) -Z(1-a)) 表示正态分布的上(a)分位点与下(1-a)分位点在分布曲线上关于均值的对称性。 左侧 (Z(a))&#xff1a; 这是分布曲线上累积概率为(a)的那个点。也就是说&#xff0c;这是一个使得这个点及其左侧的面积占据整个曲线下方(a)的位置。 右侧 (Z(1-a))&#xff1…

网页设计--第6次课后作业

试用Vue相关指令完成对以下json数据的显示。显示效果如下&#xff1a; 其中&#xff1a;gender1 显示为女&#xff0c;gender2显示为男。价格超过30元&#xff0c;显示“有点小贵”。价格少于等于30元&#xff0c;则显示“价格亲民”。 data: {books: [{"id": "…

Selenium IED安装及简单使用

本文已收录于专栏 《自动化测试》 目录 背景介绍优势特点安装步骤录制脚本总结提升 背景介绍 Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 Webdriver 是一个 API 和协议&#xff0c;它定义了一个语言中立的接口&#xff0c;用于控制 web 浏览器的行为。 每…

基于Unity3D 低多边形地形模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

springboot + thymeleaf + layui 初尝试

一、背景 公司运营的同事有个任务&#xff0c;提供一个数据文件给我&#xff0c;然后从数据库中找出对应的加密串再导出来给他。这个活不算是很难&#xff0c;但时不时就会有需求。 同事给我的文件有时是给excel表格&#xff0c;每一行有4列&#xff0c;逗号隔开&#xff0c;…

RocketMQ-RocketMQ高性能核心原理(流程图)

1.NamesrvStartup 2.BrokerStartup 3. DefualtMQProducer 4.DefaultMQPushConsumer

LeetCode-数组-重叠、合并、覆盖问题-中等难度

435. 无重叠区间 我认为区间类的题型&#xff0c;大多数考验的是思维能力&#xff0c;以及编码能力&#xff0c;该类题型本身并无什么算法可言&#xff0c;主要是思维逻辑&#xff0c;比如本题实际上你只需要能够总结出重叠与不重叠的含义&#xff0c;再加上一点编码技巧&#…