vite+vue-router4.x配置动态路由

news2024/11/17 1:49:13

踩过的坑:

import直接导入组件;
router.addRoute 并不能一次性给你导入(即不是vue-router3.x以下的addRoutes);
addRoute后页面空白;

直接上才艺!

我的设计思路是登录后获取token,并存入cookies,然后进入后台管理页面,在路由拦截里判断有没有动态路由,没有则await请求后动态添加进来;
后台给我们的格式是:在这里插入图片描述
即一个树数据,需要我们通过递归来修改Import导入组件进来;
刚开始以为是之前vue-cli那种可以直接Import导入,试过了无数次最后console.log输出才发现在vite构建的项目里 import不能动态加载文件,需要用到vite的vite.meta.glob方法;
vite.meta.glob说明文档

声明一个函数来格式化后台传过来的数据:

import Main from 'src/layouts/admin.vue'
const modules = import.meta.glob('../views/admin/**/*.vue');

export const asyncRouterFormat = (temp: Login.Routers[]) => {
  return temp.map((item) => {
    
    const routes: System.AsyncRoutes = {
      path: item.path,
      meta: item.meta,
      redirect: '',
      component: Main
    };
    if (item.component) {
      routes.component = modules[`../views/admin/${item.component}.vue`]
    } else {
      routes.redirect = item.children?.length ? item.children[0].path : '';
    }
    if (item.children?.length) {
      routes.children = asyncRouterFormat(item.children)
    }

    return routes
  })
}

在路由拦截器里导入并在某些时刻调用这个方法:
在这里插入图片描述

在访问含有/admin/*的页面时,会先判断有没有token,有则继续访问;没有则通过await store.getUserInfo()方法来获取数据,该方法内部请求成功后会把数据赋值给store.routers。通过刚才写好的asyncRouterFormat方法处理动态路由,然后接收数据,在遍历中addRoute。vue-router4.x不能一次性动态加进去,需要遍历后调用addRoute来添加(里面有嵌套路由也会自动添加进去,所以只需要遍历一层就够了);

需要注意的是addRoute后,需要next({to, replace: true}),直接调用next()会打开空白页面或者直接跳到404。

通过以上方法,即使你刷新了页面,也不会先显示空白后再加载页面。

有需要的话我可以把代码上传到github,先这样吧。

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

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

相关文章

bizlog通用操作日志组件(代码分析篇)

引言 在上篇博客中介绍了通用操作日志组件的使用方法,本篇博客将从源码出发,学习一下该组件是如何实现的。 代码结构 该组件主要是通过AOP拦截器实现的,整体上可分为四个模块:AOP模块、日志解析模块、日志保存模块、Starter模块…

企业小程序商城的推广方式有哪些_分享小程序商城的作用

其实搭建小程序商城比较容易,难的是后期的运营。要想办法进行引流,用户运营伙伴就给大家介绍一些引流推广的方法。 1、利用微信好友、微信群和朋友圈 可以让用户分享小程序给微信好友或微信群,这是吸引新用户的最快方法。除此之外&#xff0…

Kettle入门到实战

简介 Kettle是一个方便ETL(数据的抽取,装换,装载)开源框架。 官网 kettle下载、kettle源码下载 – Kettle中文网 百度网盘下载 链接:https://pan.baidu.com/s/1C-izMX_3KMkRb5hhdj66xg 提取码:yyds --来自百度网盘超级会员…

go radix tree

Radix Tree Search Insert Insert ‘water’ at the root Insert ‘slower’ while keeping ‘slow’ Insert ‘test’ which is a prefix of ‘tester’ Insert ‘team’ while splitting ‘test’ and creating a new edge label ‘st’ Insert ‘toast’ while splitti…

java 多线程()—— 线程同步=队列+锁

一、线程同步 队列 锁 同步就是多个线程同时访问一个资源。 那么如何实现? 队列锁。 想要访问同一资源的线程排成一个队列,按照排队的顺序访问。访问的时候加上一个锁(参考卫生巾排队锁门),访问完释放锁。 二、 不…

gitblit 搭建本地 git 仓库

目录 一、简介 二、准备工作 1.安装Java 2.下载gitblit 3.创建资料目录 三、修改配置 1.git.repositoriesFolder 2.server.httpPort 3.server.httpBindInterface 4.installService.cmd 四、gitblit图标显示异常 结束 一、简介 Gitblit是一个用于管理,查…

数据结构与算法这么重要还不会?字节内部笔记来帮你轻松拿下!

对任何专业技术人员来说,理解数据结构都非常重要。作为软件开发者,我们要能够用编程语言和数据结构来解决问题。编程语言和数据结构是这些问题解决方案中不可或缺的一部分。如果选择了不恰当的数据结构,可能会影响所写程序的性能。因此&#…

VKL076-19*4点 超低功耗抗干扰LCD液晶段码显示屏驱动控制电路(IC/芯片),超低工作电流约7.5微安,多用于仪器仪表类,可提供FAE技术支持

产品品牌:永嘉微电/VINKA 产品型号:VKL076 封装形式:SSOP28 概述: VKL076 SSOP28是一个点阵式存储映射的LCD驱动器,可支持最大76点(19SEGx4COM)的 LCD屏。单片机可通过I2C接口配置显示参数和…

【Hack The Box】linux练习-- SwagShop

HTB 学习笔记 【Hack The Box】linux练习-- SwagShop 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月17日🌴 &#x1…

Python 完美解决 Import “模块“ could not be resolved ...

vscode 中 python 提示警告错误,但是还是能跑起来代码: Import "playwright.sync_api" could not be resolved Pylance reportMissingImports 原因可能有两个: 1、未下载此包,打开命令行,输入 $ pip list&a…

problem B.Genshin Impact(2022合肥icpc)

题意&#xff1a;对目标持续施法&#xff0c;法术是每隔y秒让目标开始持续燃烧x秒&#xff0c;每次施法的概率是1/p 求燃烧时间比上总时间的期望值 &#xff08;题面是laji&#xff09; 思路&#xff1a;我们把总时间看成许多y段 当x<y的时候&#xff0c;只有一种情况就…

JVM虚拟机(整体架构、类文件结构)我来了~~~

虚拟机 1.1 发展历程 1.1.1 java往事 ​ Java诞生在一群懒惰、急躁而傲慢的程序天才之中。 ​ 1990年12月&#xff0c;Sun的工程师Patrick Naughton被当时糟糕的Sun C工具折磨的快疯了。他大声抱怨&#xff0c;并威胁要离开Sun转投当时在Steve Jobs领导之下的NeXT公司。领导…

CRGDFPASSC,CAS号:166184-23-2

CRGDFPASSC是一种含环rgd的十肽&#xff0c;与血小板表面的纤维蛋白原受体结合。在5号位置用Phe取代Ser的类似物作为血小板聚集抑制剂&#xff0c;其活性是CRGDSPASSC的3倍(IC₅₀ 2.5M)。 编号: 130659中文名称: CRGDFPASSC英文名: CRGDFPASSCCAS号: 166184-23-2单字母: CRGDF…

方法2—并行数据流转换为一种特殊串行数据流模块的设计,

并行数据流转换为一种特殊串行数据流模块的设计&#xff0c;设计两个可综合的电路模块1&#xff0c;第一个可综合模块&#xff0c;M1。2&#xff0c;描述M2模块3&#xff0c;描述M0模块的Verilog代码4&#xff0c;描述顶层模块5&#xff0c;电路生成的门级网表&#xff0c;netl…

【第五部分 | JS WebAPI】1:WebAPIs概述、网页元素的获取、事件

目录 | 概述 | 文档、元素、节点的概念 | 获取元素 根据ID获取 根据标签名获取 通过HTML5新增方法获取 特殊元素获取&#xff08;body html&#xff09; | 事件基础 事件三要素 点击事件 光标获得/失去焦点事件 [ 更多其它事件 ] 刷新网页自动执行某些事件 | 概述 …

Alibaba内部首发“面试百宝书+超全算法面试手册”PDF版下载

面试你打算要多高的薪资&#xff1f; 第一份工作的薪资水平就是你的薪资起点&#xff0c;如果你拿到的第一份薪水远高于其他人&#xff0c;那么你在未来涨薪路上就会省很多力。 想刚开始工作就拥有高薪&#xff0c;那就需要抬高自己的“身价”&#xff0c;提升自己的工作能力…

[附源码]java毕业设计-线上摄影平台系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Blob和ArrayBuffer和File

Blob Blob对象表示一个不可变、原始数据的类似文件的对象。Blob 表示的不一定是JavaScript原生格式的数据。 Represents a “Binary Large Object”, meaning a file-like object of immutable, raw data。 type BufferSource ArrayBufferView | ArrayBuffer; type BlobPart…

微前端——single-spa源码学习

前言 本来是想直接去学习下qiankun的源码&#xff0c;但是qiankun是基于single-spa做的二次封装&#xff0c;通过解决了single-spa的一些弊端和不足来帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 所以我们应该先对single-spa有一个全面的认识和了解&#xff0c…

看了就能懂的NIO使用深入详解

NIO概述 NIO介绍 传统IO流(java.io):读写操作结束前,处于线性阻塞,代码简单,安全,性能低 NIO&#xff1a;支持非阻塞式编程,性能更有优势,但代码编写较为复杂。 概念理解 同步(synchronous):一条线程执行期间,其他线程就只能等待。 异步(asynchronous):一条线程在执行…