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

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.kler.cn/a/134874.html

相关文章:

  • 「Py」Python基础篇 之 Python都可以做哪些自动化?
  • python: postgreSQL using psycopg2 or psycopg
  • 【ChatGPT】 如何让ChatGPT分析数据并得出结论
  • 使用@react-three/fiber,@mkkellogg/gaussian-splats-3d加载.splat,.ply,.ksplat文件
  • 去地面算法——depth_clustering算法调试(1)
  • LeetCode【0014】最长公共前缀
  • 应用软件安全编程--21密钥长度应该足够长
  • 网络协议入门 笔记一
  • 数据结构八种内部排序算法c++实现
  • Mac开发指南
  • MySQL 的执行原理(四)
  • 通过U盘重装Win10教程图解
  • 如何看待阿里云发布的全球首个容器计算服务 ACS?
  • LeetCode【32】最长的有效括号
  • 系列七、GC垃圾回收【四大垃圾算法-标记压缩算法】
  • Prompt提示词——什么是CRISPE框架?QCIPSPE框架?
  • 通达信的ebk文件
  • IDA的各个视图的含义,View-A、Hex View-1等
  • 大数据基础设施搭建 - MySQL
  • 合并两个有序链表(冒泡排序实现)
  • 【MySql密码爆破脚本】用于其他爆破工具无法使用的情况下
  • 概念解析 | 网络安全数字孪生(Digital Twin of Cyber Security, DTCS)技术
  • 力扣刷题:1. 两数之和
  • windows通过命令给文件夹或文件增加权限
  • linux c与c++库互相调用
  • Nginx(反向代理,负载均衡,动静分离)