vue3动态加载组件网页刷新白屏或404/刷新之后组件消失,正常push可以进入 发现每次刷新页面整个项目main.js整个重新执行,而其他操作(页面的前进、后退等)则正常,一旦页面被刷新,说明动态路由丢失,需要重新添加。
网络上参考了无数的解决方案要么叫不要放404页面要动态加载,要么就main加载addrouer,包括问各种Ai软件没什么用
后续我的解决方案比较完美。刷新不会白屏或404,进入错误或者不存在的路由会正常404 // 这两个变量放beforeEach外面
let isRouterInitialized = false
let flag = true // 解决动态路由刷新消失的问题
主要是在beforeEach做功课,下面代码放在beforeEach即可
// 这个代码解决了刷新之后页面白屏/404
if (flag) {
flag = false
initRouter()
next({ path: to.fullPath })
}
// 解决用户第一次登录本地仓库信息为空时initRouter()加载失败问题
if (token) {
// 检查是否需要重新初始化路由(当menus有数据但路由还没初始化时)
if (menus && menus.length > 0 && !isRouterInitialized) {
console.log('检测到用户菜单数据,重新初始化路由...')
isRouterInitialized = true
initRouter()
}
整体代码
import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
import { router } from './routers.js'
import clone from 'rfdc'
import { toRaw } from 'vue'
// 标记是否已经初始化过路由
let isRouterInitialized = false
import { useUserStore } from '@renderer/stores/user.js'
let flag = true // 解决动态路由刷新消失的问题
router.beforeEach((to, from, next) => {
const UserStore = useUserStore()
const token = UserStore.userData.token
const menus = UserStore.userData.menus
if (flag) {
flag = false
initRouter()
next({ path: to.fullPath }) // 这段代码很诡异,去掉后动态路由刷新就失效
}
if (token) {
// 检查是否需要重新初始化路由(当menus有数据但路由还没初始化时)
if (menus && menus.length > 0 && !isRouterInitialized) {
console.log('检测到用户菜单数据,重新初始化路由...')
isRouterInitialized = true
initRouter()
}
// 动态添加路
// console.log(toRaw(menus));
// 判断是否需要身份验证
// 用户已经登录还想去login ,不行
if (to.path == '/login') {
next()
} else {
// 登录了去的不是login,,,可能是hoem,cartList....
// 如果用户名已有
next()
}
} else {
let toPath = to.path
if (to.path != '/login') {
// 提示
// 把未登录的时候去向的地址存储在地址栏中url?=
next('/login?redirect=' + toPath)
} else {
next()
}
}
})
- THE END -
最后修改:2025年8月1日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://aj0.cn/vue/776.html
共有 0 条评论