位置: IT常识 - 正文

vue3动态路由刷新后空白或者404(vue2动态路由)

编辑:rootadmin
vue3动态路由刷新后空白或者404 前言

推荐整理分享vue3动态路由刷新后空白或者404(vue2动态路由),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3.0动态路由,解决vue动态路由刷新问题,vue3动态路由刷新,vue3动态路由刷新,vuerouter动态路由,解决vue动态路由刷新问题,vue3动态路由刷新丢失,vue3动态路由刷新,内容如对您有帮助,希望把文章链接给更多的朋友!

之前用vue+ant-design-vue写了一个动态路由的页面,更新看一下不能用了555~~~ 之前用的组件版本不知道了,回退也不知道哪个版本合适,就是用"vue": "^3.2.13" , "vue-router": "^4.0.3","vuex": "^4.0.0",ant-design-vue": "^3.2.5"重新写一个吧。 本文章是看了其它杂七杂八的博客,自己排错后编写下,不容易啊

实现首先在store\index.js文件编写import { createStore } from 'vuex'export default createStore({ state: { menu_lists: [] //菜单 }, getters: { account(state) { return state.menu_lists // 读取菜单列表 } }, mutations: { // 增加菜单 menuAdd(state, n) { if (state.menu_lists.length == 0) { state.menu_lists.push(n) } else { if (state.menu_lists.some(menu => menu.id!= n.id)) { state.menu_lists.push(n) } } }, // 清空菜单 menuDelect(state) { state.menu_lists.length = 0 } }, actions: { menu_add({ commit }, data) { commit('menuAdd', data) },// 登出时调用将菜单数据删除 menu_delect({ commit }) { commit('menuDelect') } }, modules: { }})接着在App.vue编写vue3动态路由刷新后空白或者404(vue2动态路由)

原因: 刷新时,动态路由需要重新挂载到路由实例, 但是在App.vue中调用init方法去初始化,并不能解决,因为App.vue属于路由的根,还未进入就被通配符拦截到404页面了, 我就在根上退出时将菜单保存在sessionStorage

// 创建完毕状态 created() {//在页面加载时读取sessionStorage里的状态信息 if (sessionStorage.getItem("store")) { this.$store.replaceState( Object.assign( {}, this.$store.state, JSON.parse(sessionStorage.getItem("store")) ) ); } //在页面刷新时将vuex里的信息保存到sessionStorage里 window.addEventListener("beforeunload", () => { sessionStorage.removeItem("store"); sessionStorage.setItem("store", JSON.stringify(this.$store.state)); }); }读取后端菜单文件进行处理下

根据实际修改 vueRouter4中移除了addRouters,所以只能通过addRouter进行路由的动态添加

import { useRouter } from "vue-router";import { useStore } from "vuex";export default defineComponent({setup() {const store = useStore();const router = useRouter();// 路由数据重新封装 function routerPackag(routers) { let accessedRouters = routers.filter((itemRouter) => { if (itemRouter.component != "Layout") { //处理组件---重点 router.addRoute("base", { path: `/${itemRouter.path}`, name: itemRouter.name, component: () => import(`@/${itemRouter.component}`), }); // 通过sessionStorage排查菜单是否存储,避免刷新后重复添加 if (!sessionStorage.getItem("store")) { store.dispatch("menu_add", itemRouter); } } //存在子集 if (itemRouter.children && itemRouter.children.length) { routerPackag(itemRouter.children); } return true; }); return accessedRouters; } })}主要的来了,可以main或者router\index编写(我是在router\index编写的)

1、刷新404:将匹配全部为定义路径到404的路由从静态路由表中去除,在动态权限路由都添加了之后在添加。 2、刷新白屏:如果是在路由守卫router.beforeEach中检测并用router.addRoute添加的路由,则需要将动态权限路由添加后的next()放行,改为next({ path: ${to.path} })触发新导航。

import { createRouter, createWebHashHistory } from 'vue-router'import store from "../store";import { ref } from 'vue'const routes = [ { path: '/login', name: 'login', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import( /* webpackChunkName: "Login" */ '../views/ant_login.vue'), meta: { requireAuth: false, }, }, { path: '/', name: 'base', component: () => import( /* webpackChunkName: "Login" */ '../views/ant_base.vue'), meta: { requireAuth: true, }, children: [ { path: 'index', name: 'home', redirect: "/map", component: () => import( /* webpackChunkName: "Login" */ '../views/ant_home.vue'), } ] }, { name: "NotFont", path: '/:pathMatch(.*)*', component: () => import('../components/NotFont.vue'), alias: '/404', // 别名 hideMenu: true }]const router = createRouter({ history: createWebHashHistory(), //createWebHashHistory是hash模式 // 页面刷新白屏问题 // mode取值说明: // histroy:URL就像正常的 url,示例:http://localhost:8080/home // hash:默认值,会多一个“#”,示例:http://localhost:8080/#/home // abstract”:url不变示例:http://localhost:8080 // mode: 'history', base: process.env.BASE_URL, routes})// 下面全局前置路由守卫可在main文件编写const registerRouteFresh = ref(true) // 定义标识,记录路由是否添加router.beforeEach(async (to, from, next) => { if (registerRouteFresh.value && store.state.menu_lists.length > 0) { router.removeRoute("NotFont") await store.state.menu_lists.forEach(e => { // // 处理组件---重点 router.addRoute("base", { path: `/${e.path}`, name: e.name, component: () => import(`@/${e.component}`), }); }) registerRouteFresh.value = false // next({ ...to, replace: true }) next({ path: `${to.path}` }) } else { router.addRoute(router.options.routes[2]) next() }})// 全局后置钩子-常用于结束动画等router.afterEach(() => { //不接受next});export default router登出页面需要清除缓存import { useStore } from "vuex";export default defineComponent({setup() {const store = useStore()function Logout() {// 将vuex的菜单数据删除store.dispatch("menu_delect"); window.sessionStorage.clear() })}排错过程

心累不说看了那些博客了真是大海捞个针,博客太杂了,有的写的next({ …to, replace: true })我就想知道你是咋成功的,哎,排的有好的但不实用,排到垃圾就不想说了,连使用的组件都没有就光把一段代码粘贴上去,累累累😫

期望

码友们有啥更简单的方式实现前端动态路由刷新后能正常显示刷新前页面欢迎评论分享

本文链接地址:https://www.jiuchutong.com/zhishi/288127.html 转载请保留说明!

上一篇:在一个JS文件中引用另一个JS文件中的变量(在一个js文件中怎么写)

下一篇:阳澄湖大闸蟹的做法[有图](阳澄湖大闸蟹的功效和作用)

  • ipad2021多少毫安电池(ipad多少毫安电池)

    ipad2021多少毫安电池(ipad多少毫安电池)

  • p40中国开售时间(p40国内什么时候卖)

    p40中国开售时间(p40国内什么时候卖)

  • wps怎么分裂单元格(wps怎么拆分单元)

    wps怎么分裂单元格(wps怎么拆分单元)

  • 换了苹果手机怎么用过去的ID(换了苹果手机怎么连接车载蓝牙)

    换了苹果手机怎么用过去的ID(换了苹果手机怎么连接车载蓝牙)

  • 拼多多举报评价是什么意思(拼多多举报评价会怎么样?)

    拼多多举报评价是什么意思(拼多多举报评价会怎么样?)

  • 4k视频一分钟多少g(4k视频每分钟多少g)

    4k视频一分钟多少g(4k视频每分钟多少g)

  • 有线网络的传输线路有哪些(有线网络的传输介质有哪些各有什么特点)

    有线网络的传输线路有哪些(有线网络的传输介质有哪些各有什么特点)

  • 华为nova7se怎么隐藏应用(华为nova7se怎么添加nfc)

    华为nova7se怎么隐藏应用(华为nova7se怎么添加nfc)

  • 苹果耳机有一只总没电(苹果耳机有一只不响)

    苹果耳机有一只总没电(苹果耳机有一只不响)

  • 华为开机卡在华为标志(华为手机开机卡在huawei界面)

    华为开机卡在华为标志(华为手机开机卡在huawei界面)

  • 三核是什么(什么是三核产品)

    三核是什么(什么是三核产品)

  • 微信不是对方好友却能发信息(微信不是对方好友能看到朋友圈吗)

    微信不是对方好友却能发信息(微信不是对方好友能看到朋友圈吗)

  • 简述域名系统的作用(简述域名系统的主要功能)

    简述域名系统的作用(简述域名系统的主要功能)

  • 有什么可以看电视直播的软件(有什么可以看电视剧免费的网页)

    有什么可以看电视直播的软件(有什么可以看电视剧免费的网页)

  • iphonex怎么设置软件锁(iphoneX怎么设置铃声自定义)

    iphonex怎么设置软件锁(iphoneX怎么设置铃声自定义)

  • 微信怎么设置置顶文案(微信怎么设置置顶标签信息)

    微信怎么设置置顶文案(微信怎么设置置顶标签信息)

  • QQ怎么拒接别人的消息(qq怎么拒绝别人来电)

    QQ怎么拒接别人的消息(qq怎么拒绝别人来电)

  • iqoo支持nfc吗(iqoo支持nfc的型号)

    iqoo支持nfc吗(iqoo支持nfc的型号)

  • vivo如何导出手机通讯录(vivo手机怎样导出手机号码)

    vivo如何导出手机通讯录(vivo手机怎样导出手机号码)

  • 滴滴司机能选乘客数量吗(滴滴司机可以选乘客吗)

    滴滴司机能选乘客数量吗(滴滴司机可以选乘客吗)

  • 混合开发的app有哪些(混合开发的app比原生差多少)

    混合开发的app有哪些(混合开发的app比原生差多少)

  • 手机一打开就出现热点资讯怎么关闭(手机一打开就出现输入法怎么关闭)

    手机一打开就出现热点资讯怎么关闭(手机一打开就出现输入法怎么关闭)

  • 快手pk怎么挂断对方(快手pk怎么挂断对方视频教学)

    快手pk怎么挂断对方(快手pk怎么挂断对方视频教学)

  • 电脑grub怎么解决(grub模式下清除密码)

    电脑grub怎么解决(grub模式下清除密码)

  • 拼多多盗图可以投诉吗(拼多多盗图可以投诉工商局吗)

    拼多多盗图可以投诉吗(拼多多盗图可以投诉工商局吗)

  • Mac系统怎么在侧栏监控系统资源?(mac侧边栏设置)

    Mac系统怎么在侧栏监控系统资源?(mac侧边栏设置)

  • Windows7系统无法修改账号密码的解决方法(window7无法正常启动怎么办)

    Windows7系统无法修改账号密码的解决方法(window7无法正常启动怎么办)

  • python中datetime转时间戳(python datetime把日期转换字符串)

    python中datetime转时间戳(python datetime把日期转换字符串)

  • 上缴非税收入前是否要交税
  • 开办期间的利息收入怎么做账
  • 企业投资收益要交哪些税
  • 印花税按什么金额吗
  • 保险经纪公司要取得什么证
  • 购入原材料结转采购成本的会计分录
  • 企业入库流程图
  • 小规模所得税税负率怎么计算
  • 成本收入不配比的风险有哪些
  • 一般纳税人差额征税申报表怎么填
  • 原始投资额包括资本化利息吗
  • 建筑业会计科目工程结算
  • 增值税即征即退2023政策
  • 外资企业订单外放,员工待岗合法吗
  • 长期股权投资权益法初始成本的确定
  • 独立核算分公司注销需要清算吗
  • 实收资本变更股东要交税吗
  • 盈余公积要是提多了能转回么
  • 广告公司对外捐赠的会计处理怎么做?
  • 公司社保收费标准
  • 业务招待费取得的专票可以抵扣吗
  • 稽查查补税款
  • 采购差价构成犯罪吗
  • 第一季度盈利第二季度亏损全年盈利
  • 开发票具体内容超过经营范围还可以开吗?
  • 增值税发票处理流程
  • 建筑业简易计税分包差额申报
  • 个人开机械租赁发票需要什么
  • 长期股权投资涉及或有对价的帐务处理
  • 当年亏损可以用以前年度来弥补吗
  • 预估材料入账后冲回的步骤
  • 基金经费管理办法
  • 公司买结构性存款算投资吗
  • 公司租入农民的房子好吗
  • 待报解地方预算收入怎么做账
  • 企业资产损失会计处理
  • 高新技术企业研究开发费用加计扣除
  • linux操作系统安装包
  • php可以做什么脚本
  • php登录注册页面完整代码
  • 金融工具减值的范围包括哪些?
  • php面向对象编程
  • python获取值对应的键
  • python迭代器iterator
  • 公益性怎么解释
  • 支付劳务费未开具发票
  • 申报错误要罚款吗
  • 增值税发票记账联用途
  • 库存商品转成本意味着什么
  • 应收账款损失率计算公式
  • 租车协议要不要报税务机关备案?
  • 计提合同印花税怎么做账
  • 普通发票的进项票怎么做分录
  • 应税消费品含税吗
  • 转增股股价
  • 固定资产递延资产
  • 代开专票作废了扣了两次税怎么办?
  • 微信支付属于现金支付还是转账支付
  • 应收账款周转率计算公式
  • 供应商退回来的钱应走哪个科目
  • 损益平准金是什么会计科目
  • 银行存款手工账
  • 发票盖发票专用章
  • deepin 2014系统下安装mysql数据库的方法步骤
  • mysql重置初始密码
  • 怎么查看445端口有没有关闭
  • windows下命令
  • 503 service unavailable错误说明
  • linux设置gid
  • win8微软拼音输入法打不出中文
  • win8图标放桌面
  • win8注销在哪里
  • 20150405农历
  • http://www.2cto.com/kf/201402/280576.html
  • jquery easyui 教程
  • 备份文件并上传到网盘
  • vue中使用jsx
  • JavaScript 入门·JavaScript 具有全范围的运算符
  • python语言面向过程吗
  • 广东省国家税务总局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设