当前位置: 首页 > news >正文

vue动态配置路由

文章目录

  • 前言
  • 定义项目页面格式
  • 一、vite 配置动态路由
    • 新建 `/router/utils.ts`
    • 引入 `/router/utils.ts`
  • 二、webpack 配置动态路由
  • 总结
    • `如有启发,可点赞收藏哟~`


前言

项目中动态配置路由可以减少路由配置时间,并可减少配置路由出现的一些奇奇怪怪的问题
路由配置化可统一定义相关属性等
本文记录vitewebppack两种构建工具配置动态路由,


定义项目页面格式

页面定义最好同时定义对应的titlename

  • 以views目录的page-template为例

在这里插入图片描述

  • page-template/index.ts文件
import { defineComponent, h, defineAsyncComponent } from 'vue';const PageComponent = defineAsyncComponent(() => import('./components/index.vue'));export default defineComponent({// 配置后可在 动态获取路由配置中设置对应值title: '页面模版',name: 'PageTemplate',setup() {return () => h(PageComponent);},
});
  • page-template/components/index.ts文件
import { defineComponent } from 'vue'
export default defineComponent({setup() {return {};},
});
  • page-template/components/index.vue文件
<script lang="ts" src="./index.ts" /><template><div>template</div>
</template><style scoped lang="less"></style>

一、vite 配置动态路由

vite使用import.meta.glob动态获取文件

新建 /router/utils.ts

/*** 路由配置文件*/import { DEFAULT_DOCUMENT_TITLE } from '@/const/base';
import type { RouteRecordRaw } from 'vue-router';function getComponent() {return import.meta.glob('../views/**/index.ts', { eager: true });
}// 获取路由文件
export const vueRouters = (): RouteRecordRaw[] => {const routerList: RouteRecordRaw[] = [];const files = getComponent();Object.keys(files).forEach((fileSrc: string) => {const component = files[fileSrc] as any;const componentPath = fileSrc.replace(/^\.\//, '');const routerPath = componentPath.replace('../views', '').replace(/\/index.ts$/, '');if (!componentPath.includes('components')) {routerList.push({path: routerPath,name: component.default.name,component: () => import(/* @vite-ignore */componentPath),meta: {title: component.default.title || DEFAULT_DOCUMENT_TITLE,// skeleton: component.skeleton, // TODO 待处理页面骨架屏// background: component.backgroundColor, // TODO 待处理页面级别颜色},});}});return routerList;
};

引入 /router/utils.ts

/router/index.ts

import { createRouter, createWebHistory } from "vue-router";
import HomeView from "@/views/layout/index";
import { vueRouters } from "./utils";const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [......vueRouters()],
});
export default router;

在这里插入图片描述

二、webpack 配置动态路由

webpack使用require.context获取文件路径

  • /router/utils.ts
/*** 路由配置文件*/import { DEFAULT_DOCUMENT_TITLE } from '@/const/base';
import type { RouteRecordRaw } from 'vue-router';function getComponent() {return require.context('../views', true, /\.ts$/);
}// 获取路由文件
export const vueRouters = (): RouteRecordRaw[] => {const routerList: RouteRecordRaw[] = [];const requireRouters = getComponent();requireRouters.keys().forEach((fileSrc: string) => {const viewSrc = requireRouters(fileSrc);const component = viewSrc.default;const componentPath = fileSrc.replace(/^\.\//, '');const routerPath = componentPath.replace(/(\S+)index.ts$/, '/$1index.html');if (component.name !== 'Home' && !component.isOffLine) {routerList.push({path: routerPath,name: component.name,component: () => import(`@/views/${componentPath}`),meta: {title: component.title || DEFAULT_DOCUMENT_TITLE,},});}});return routerList;
};export default vueRouters();

使用同vite


总结

vite 和 webpack 不同于获取文件格式,获取后的操作基本一致

如有启发,可点赞收藏哟~

http://www.lryc.cn/news/237556.html

相关文章:

  • 科技云报道:全球勒索攻击创历史新高,如何建立网络安全的防线?
  • 通过bat命令启动jar后缀软件
  • Python选择排序和冒泡排序算法
  • 集合的自反关系和对称关系
  • 传递函数的推导和理解
  • STM32 SPI
  • Linux系统编程 day02 vim、gcc、库的制作与使用
  • Mistral 7B 比Llama 2更好的开源大模型 (四)
  • 相似基因序列问题 ——查找
  • 【汇编】“转移”综述、操作符offset、jmp指令
  • Java格式化类Format
  • 力扣每日一题-美化数组的最少删除数-2023.11.21
  • 【练习】检测U盘并自动复制内容到电脑的软件
  • 【计算机毕业设计】Springboot高校论文管理系统 -96280,免费送源码,【开题选题+程序定制+论文书写+答辩ppt书写-原创定制程序】
  • nginx 代理接口报404 问题排查
  • JVM 调优指南
  • 澳洲猫罐头如何?我亲自喂养过的优质猫罐头分享
  • CISP练习测试题
  • 2023下半年软件设计师考试知识点大全思维导图
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
  • Android Binder 跨进程通信的优势是什么
  • HashMap的详细解读
  • 10个好用的Mac数据恢复软件推荐—恢复率高达99%
  • EtherCAT从站EEPROM分类附加信息详解:RXPDO(输入过程数据对象)
  • 释放锁流程源码剖析
  • ComText让机器人有了情节记忆
  • 【Leetcode合集】13. 罗马数字转整数
  • centos oracle11g开启归档模式
  • 【数据结构初阶】双链表
  • Django实战:从零到一构建安全高效的Web应用