后台获取路由参数 拼接动态路由

动态路由

根据登录的角色不同将后端返回的路由参数添加进路由中
这是测试代码 meta里也可以写icon等
测试代码
剩下的正常写正常写

首先 var 一个变量
然后进行路由拦截

router.beforeEach((to, from, next) => {
	if (!getRouter) {//不加这个判断,路由会陷入死循环
		if (!getObjArr('router')) {
			getRouter = testRouter//后台拿到路由
			saveObjArr('router', getRouter) //存储路由到localStorage

			routerGo(to, next)//执行路由跳转方法

		} else {//从localStorage拿到了路由
			getRouter = getObjArr('router')//拿到路由
			routerGo(to, next)
		}
	} else if (to.matched.length == 0) {
		next("/404")
	} else {
		next()
	}
});

在获取后测试的那些路由进行添加

function routerGo(to, next) {
	getRouter = filterAsyncRouter(getRouter) //过滤路由
	router.addRoutes(getRouter)
	 //动态添加路由  VUE3.X 来用addRoute()且可以用于添加进某子路由里 但path要加上父path 
	 //比如:“/index/Home_page”
	next({ ...to, replace: true })  //一定要写成{ ...to, replace: true } 否则进去将白屏
}

最关键的了

进行路由上的拼接

function filterAsyncRouter(asyncRouterMap) { //遍历后台传来的路由字符串,转换为组件对象
	let accessedRouters = [];
	asyncRouterMap.forEach((item, index) => {
		accessedRouters.push({
			path: item.path,
			name: item.name,
			redirect: item.redirect,
			meta: { title: item.meta.title },
			component: () => import('../views/' + item.component),
		})
		if (item.children && item.children.length) {
			accessedRouters[index].children = filterAsyncRouter(item.children) 
			//这里如果有子路由的话进行递归来拼接子路由
		}
		return true
	})
	return accessedRouters
}

saveObjArr()储存在本地

function saveObjArr(name, data) { /
	localStorage.setItem(name, JSON.stringify(data))
}

从本地获取

function getObjArr(name) { //localStorage 获取数组对象的方法
	if (!localStorage.getItem(name)) {
		return localStorage.getItem(name)
	} else {
		return JSON.parse(localStorage.getItem(name));
	}

}

这些就是我用于动态路由的写法,之前也有看过其他,但多是配合layout比较复杂。我直接进行的数据的拼接。
至于addRoutes()和addRoute()两者添加路由的方法 使用第一种将会报警告 说已经停用了 但是VUE2.X没事 3.X不行 且addRoutes不可以网静态路由子路由添加 只能用addRoute() 且动态路由向静态子路由添加path要加上父路由的path
router.addRoutes(getRouter)
addRoute(‘404’,getRouter) 向404的子路由添加

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值