Vue中自动生成路由配置文件覆盖路由配置

本文主要是介绍Vue中自动生成路由配置文件覆盖路由配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vue中自动生成路由配置文件覆盖路由配置

设计思路

  • 读取@/views下所有index.vue如果当前文件下有包含相同路径则认为是它的子路由。
  • 但也不能就这样写死,要创建page.(ts|js)配置文件也可以更改当前的配置,Page.(ts|js)比重大于自动生成的路由配置。

踩坑点

坑点1

这里的'@/views'不能使用变量传入。

(require as any).context('@/views', true, /index\.vue$/)

坑点2

这里如果想对文件进行深度拷贝,直接使用三点(…)是不行的,这里借助了loadsh中的merge完成深度拷贝。

// 导出当前存在的路由并重新赋值
const existingRoute = routeMap[route.path];
// 当前路由存在
if (existingRoute) {const exportRouteConfig = context(fileInfo?.filePath).default;// 使用loadsh合并对象routeMap[route.path] = _.merge(existingRoute, exportRouteConfig);
}

代码编写

在vue中自动生成路由,并将目录下配置文件覆盖到原先路由配置。

import { routeFilenameHelper } from '@/utils/file/routeFileUtil';
import _ from 'lodash';
import { RouteRecordRaw } from 'vue-router';// * 最终路由
const routeMap: Record<string, RouteRecordRaw> = {};// * 所有处理的路由
const contexts = [{ context: (require as any).context('@/views', true, /index\.vue$/), isIndex: true },{ context: (require as any).context('@/views', true, /page\.(ts|js)$/), isIndex: false },
];/*** 构建路由信息* @param context 上下文信息* @param isIndex 是否第一次遍历* @param route 路由内容*/
function buildRouteTree(context: any, isIndex: boolean, route: any) {// 遍历当前子路由context.keys().forEach((item: string) => {// 获取子路由下所有文件对象格式const childrenFileInfo = routeFilenameHelper(item, '/');// 组装子路由对象const childrenRoute: any = {name: childrenFileInfo?.name,path: childrenFileInfo!.path,component: isIndex ? () => import(`@/views${childrenFileInfo?.replaceName}`) : undefined,children: [],meta: { isFullScreen: false },};// 如果当前路由对象等于当前遍历的路由子对象,将子路由推到父级路由中if (childrenFileInfo?.path.includes(route.path) && childrenFileInfo?.path !== route.path) {route.children.push(childrenRoute);}});
}/*** 遍历路由信息* @param context 路由上下文* @param isIndex 是否为索引遍历*/
const createRouteList = (context: any, isIndex: boolean) => {// 遍历文件下所有路径context.keys().forEach((filePath: string) => {const fileInfo = routeFilenameHelper(filePath, '/');// 组装路由对象const route: RouteRecordRaw = {name: fileInfo?.name,path: fileInfo!.path,component: isIndex ? () => import(`@/views${fileInfo?.replaceName}`) : undefined,children: [],meta: { isFullScreen: false },};// * 如果是第一次遍历 初始化赋值if (isIndex) {routeMap[route.path] = route;buildRouteTree(context, isIndex, route);}// * 读取配置文件中内容else {// 导出当前存在的路由并重新赋值const existingRoute = routeMap[route.path];// 当前路由存在if (existingRoute) {const exportRouteConfig = context(fileInfo?.filePath).default;// 使用loadsh合并对象routeMap[route.path] = _.merge(existingRoute, exportRouteConfig);}}});
};// * 生成路由信息
contexts.forEach(({ context, isIndex }) => createRouteList(context, isIndex));// * 返回生成好的路由
export const pageRoutes: Array<RouteRecordRaw> = Object.values(routeMap);

这篇关于Vue中自动生成路由配置文件覆盖路由配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974028

相关文章

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

springboot的controller中如何获取applicatim.yml的配置值

《springboot的controller中如何获取applicatim.yml的配置值》本文介绍了在SpringBoot的Controller中获取application.yml配置值的四种方式,... 目录1. 使用@Value注解(最常用)application.yml 配置Controller 中

springboot中配置logback-spring.xml的方法

《springboot中配置logback-spring.xml的方法》文章介绍了如何在SpringBoot项目中配置logback-spring.xml文件来进行日志管理,包括如何定义日志输出方式、... 目录一、在src/main/resources目录下,也就是在classpath路径下创建logba

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点