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

在 vue3 中动态路由问题记录

第一种

如果这样子的话需要加上 /* @vite-ignore / ,但是在这样用这行部署服务器上跳转会有问题

component: () => import(/ @vite-ignore */ '../views/' + e.component + '.vue')

第二种

  // 解决跳转问题const modeules = imporet.meta.glob('@/views/**/**.vue')component: modules['../views/' + e.component +'.vue']

其实这是vite的原因导致的,他在编译的是没有处理这种情况所以报错

完整代码

addRoute.ts

const pages = import.meta.glob('@/views/**/**.vue')import router from '@/router/index'
import type { RouteRecord } from 'vue-router'export interface LoginInfo {id?: Number,title: String,icon: String,path?: String,name: String,component: String,children?: [],
}export function addRoute(list: any[]) {list.forEach((menu: { children: any[] }) => {if (menu.children) {menu.children.forEach((e: any) => {if (!e.component) {return}router.addRoute('index', {name: e.name,path: e.path,meta: {icon: e.icon,title: e.title,fatherTitle: menu.title,fatherPath: menu.children[0].path,dynamic: true},component: pages['/src/views/' + e.component + '.vue']})if (e.children.length) {addRoute(e.children)}})}})// console.log(router.getRoutes());}export function removeRoute() {router.getRoutes().forEach((v: RouteRecord) => {if (v.meta.dynamic) {router.removeRoute(v.name as string)}})
}

menus.ts

// @src/store/menus.ts
import { defineStore } from 'pinia'
import { ref } from 'vue';
import { addRoute } from './addRoute'
import { routes } from '@/router/index'
import { getMenuList } from "@/api/login"interface AddRoute {id?: Number,title: String,icon: String,path?: String,name: String,component: String,children?: [],
}export const useMeanStore = defineStore('mean', () => {// 菜单数据const menuList = ref([] as AddRoute[])// 权限数据const permList = ref([])// 是否有路由const hasRoute = ref(false)// 改变路由状态function changeRouteStatus(state: any) {hasRoute.value = statesessionStorage.setItem("hasRoute", state)}// 设置菜单数据function setMenuList(menus: any) {let addRouterList = routes.filter(route => !route?.meta?.notDetect)menuList.value = [...addRouterList, ...menus]// 生成动态路由addRoute(menus)}// 获取菜单function getMenu() {return getMenuList().then((res: any) => {setMenuList(res.data.nav);setPermList(res.data.authoritys)})}// 设置权限数据function setPermList(authoritys: any) {permList.value = authoritys}return {menuList,permList,hasRoute,changeRouteStatus,setMenuList,setPermList,getMenu}
})

user.ts

// @src/store/user.ts
import { defineStore } from 'pinia'
import { logout } from '@/api/login'
import { ref } from 'vue';export const useUserStore = defineStore('user',() => {const token = ref("")const userInfo = ref({})function SET_TOKEN(name: string) {token.value = namelocalStorage.setItem("token", name)}function SET_INFO(user: any) {userInfo.value = user}async function remove() {await logout()localStorage.clear()sessionStorage.clear()location.reload()SET_INFO({})}return {persist: true,token,userInfo,remove,SET_TOKEN,SET_INFO}}
)

index.ts

import { useMeanStore } from './menus'
import { useUserStore } from './user'export { useUserStore, useMeanStore }

router.ts

import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
import Layout from '@/components/Layouts/index.vue'import { useMeanStore } from '@/stores/routes/menus'import NProgress from 'nprogress'
import '/node_modules/nprogress/nprogress.css'
NProgress.configure({ showSpinner: true })export const routes = [{path: '/login',name: 'login',component: () => import('@/views/login/login.vue'),meta: {notDetect: true}},{path: '/404',name: 'NotFound',component: () => import('@/views/404/error.vue'),meta: {title: 'Page not found',notDetect: true}},// 所有未定义路由,全部重定向到404页{path: '/:catchAll(.*)',redirect: '/404',meta: {title: 'Page not found',notDetect: true}},{path: '/',name: 'index',component: Layout,redirect: '/home',title: '首页',icon: 'home',children: [{path: '/home',name: 'home',title: '首页',icon: 'el-icon-s-home',component: () => import('@/views/home/index.vue'),children: [],}],},
]const router = createRouter({// 刷新时,滚动条位置还原scrollBehavior: () => ({ left: 0, top: 0 }),history: createWebHashHistory(import.meta.env.BASE_URL),// @ts-ignoreroutes
})router.beforeEach((to, from, next) => {NProgress.start()let token = localStorage.getItem("token")const useMean = useMeanStore()// console.log('hasRoute', useMean.hasRoute)if (to.meta.notDetect) {// 不需要检测的页面 直接放行next()} else if (!token) {// console.log("还没有token!!!")next({ path: "/login" })} else {// console.log("已经有路由了")next()}
})router.afterEach(() => {setTimeout(() => {NProgress.done()}, 300)
})
export default router

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 8个不可错过的高清视频素材网
  • Flink状态后端-Memory/Fs/RockDB
  • jetson nano远程调试说明
  • LangChain 推出 LangGraph Studio:首款用于可视化、交互和调试复杂代理应用的代理 IDE
  • Figma基本操作
  • RN笔记自用
  • html超文本标记语言 (HyperText Mark up Language)
  • 前端工程化项目 用npm拉git项目的时候是在是太慢了怎么办
  • 8.13 NAT模式搭建实战
  • CentOS7.6 HAproxy-7层负载均衡集群——实施方案
  • 户外上网黑科技|续航能力大比拼,飞猫、闪鱼、格行、品胜,哪个好
  • C++ CMake FFmpeg配置
  • 计算机毕业设计 家电销售展示平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • 【全国大学生电子设计竞赛】2021年I题
  • WPF WindowChrome、WindowStyle 自定义窗体样式
  • [译]前端离线指南(上)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • avalon2.2的VM生成过程
  • Centos6.8 使用rpm安装mysql5.7
  • Consul Config 使用Git做版本控制的实现
  • Docker: 容器互访的三种方式
  • HTML5新特性总结
  • js ES6 求数组的交集,并集,还有差集
  • Mithril.js 入门介绍
  • MySQL用户中的%到底包不包括localhost?
  • 阿里云Kubernetes容器服务上体验Knative
  • 闭包--闭包作用之保存(一)
  • 看域名解析域名安全对SEO的影响
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何使用 JavaScript 解析 URL
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • FaaS 的简单实践
  • ionic异常记录
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • scrapy中间件源码分析及常用中间件大全
  • 翻译 | The Principles of OOD 面向对象设计原则
  • #pragma 指令
  • #pragma预处理命令
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (160)时序收敛--->(10)时序收敛十
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (实战篇)如何缓存数据
  • (一)Dubbo快速入门、介绍、使用
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • ./和../以及/和~之间的区别
  • .helper勒索病毒的最新威胁:如何恢复您的数据?