leiwuhen-67's blog leiwuhen-67's blog
首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)

我的公众号

首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)
  • Vue2

    • 项目国际化
    • element ui之图片预览
    • element ui之图片上传到阿里云oss上
    • element ui之表格拖拽排序
    • vue动态添加路由后刷新页面白屏问题
      • 1、动态添加路由用到的API:
        • 1、router.addRoute()
        • 2、router.getRoutes()
      • 2、在全局前置守卫中动态添加路由
    • vue项目安装依赖报错
    • vue项目使用postcss-pxtorem来实现移动端适配
    • vue之低版本浏览器兼容
    • eslint报错汇总
  • Vue3

  • 《Vue》笔记
  • Vue2
心欲无痕
2023-09-21
目录

vue动态添加路由后刷新页面白屏问题

在做后台管理的时候,经常会遇到这种需求,就是路由权限的问题,而在做路由权限的时候,由于不同角色,比如管理员、普通用户等所能看到的页面是不一样的,因此就存在需要动态添加路由的问题。

# 1、动态添加路由用到的 API:

# 1、router.addRoute()

该 API 有两种用法

// 添加一条新路由规则。如果该路由规则有 name,并且已经存在一个与之相同的名字,则会覆盖它。
router.addRoute(route: RouteConfig): () => void

// 添加一条新的路由规则记录作为现有路由的子路由。如果该路由规则有 name,并且已经存在一个与之相同的名字,则会覆盖它。
router.addRoute(parentName: string, route: RouteConfig): () => void
1
2
3
4
5

# 2、router.getRoutes()

该 API 表示获取所有活跃的路由记录列表

# 2、在全局前置守卫中动态添加路由

router.beforeEach((to, from, next) => {
	...
	router.addRoute(routes)   // routers表示需要动态添加的守卫,如果需要添加多个,则需要遍历下,分别执行addRoute方法
	next()
})
1
2
3
4
5

这样就完了吗?当然不是,因为这样确实能添加成功,也能访问,但是如果刷新页面的话,会发现白屏,导致这个问题的原因是,刷新时,当前访问的路由还没有存入到路由相信中,也就是 router 中,我们就开始访问它,此时当然是白屏。
解决的办法是等路由加载完毕,再开始跳转

router.beforeEach((to, from, next) => {
	...
	router.addRoute(routes)   // routers表示需要动态添加的守卫,如果需要添加多个,则需要遍历下,分别执行addRoute方法
	next({ ...to })   // 很关键的一步
})
1
2
3
4
5

ps:这里有几点需要注意的地方:

1、动态添加路由时使用 addRoute () 方法,如果同时添加多条路由,需要遍历路由,然后分别执行 addRoute () 方法,addRoutes () 方法已废弃。

2、在动态添加路由的时候,需要做好判断,比如初始化一个变量为 false,当变量为 false 时,执行动态添加路由后,然后将该变量改为 true,否则会一直重复添加路由,导致报错。

3、动态添加路由时,需要等路由加载完,然后执行 next () 方法,否则刷新页面会白屏,关键代码 next ({ ...to})

编辑 (opens new window)
上次更新: 7/1/2024, 4:56:33 PM
element ui之表格拖拽排序
vue项目安装依赖报错

← element ui之表格拖拽排序 vue项目安装依赖报错→

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式