- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
vue实现动态路由添加功能的简单方法(无废话版本)
目录前言一.封装一个处理生产路由的函数二.vuex中进行调用三,最终完成动态添加路由总结
前言
最近练习vue的项目,有关于后台管理系统的动态添加路由部分,根据思路实现了基本的功能,在这里记录一下,等后面学习后在进行优化。
这里只是记录我个人最后实现的思路,本人由于是初学者,可能思路和代码有不正确地方,还求多见谅。也请能不吝赐教,一同进步。
一.封装一个处理生产路由的函数
我们可以封装一个函数,这个函数专门用来帮助我们生产最后添加到路由中的路由对象。
//map-menu.js
//动态添加路由
constmodules=import.meta.glob(../views/*/*.vue)//vite中获取组件文件的方法
exportfunctionmapMenu(navList){//navList传入后台接口返回的路由列表
//最终动态添加路由返回数组
constrouterList=[]
for(constkeyofnavList){
routerList.push({
path:`/${key.nUrl.split(/)[2]}`,
name:`${key.nUrl.split(/)[2].toUpperCase()}`,
component:modules[`..${key.nUrl}`]
returnrouterList
}
注意:这里需要大家自己根据自己需要的情况进行处理,因为后端接口传递过来的数据不同,所以你需要根据情况将path,name,component这三个获取出来并最终转换成你需要的。
二.vuex中进行调用
我们封装好了一个函数,接下来我们就需要调用来帮助我们动态生产路由,但是有一个问题来了,我们需要何时来进行动态生成路由。
这里我个人理解是:1.在用户进行登录后进行动态生产路由,将用户的菜单生成出来,并保存起来。2.就是在页面刷新时候我们也需要动态生成路由,因为刷新页面路由会刷新,不再次进行动态生成就是丢失,这里我们可以和对vuex初始化一起进行。
//vuex中的user.js模块
//动态添加路由
import{mapMenu}from@/util/map-menu.js//前面封装的函数
state:{
userNav:[]
mutations:{
changeUserNav(state,userNav){
state.userNav=userNav
//动态添加路由
mapMenu(userNav).forEach((route)={
router.addRoute(route)//动态添加路由
actions:{
asyncrequestUserNav({commit}){
constnavList=awaitgetRolesNavRequest()
commit(changeUserNav,navList)
cache.setCache(jxcms-userNav,navList)
这样我们就定义好了,只需要调用store.dispatch(requestUserNav)就可以动态生成路由。另外,因为vue-router4.0中将router.addRoutes方法废除了,所以我们只能使用router.addRoute循环添加所有的路由。
三,最终完成动态添加路由
前面我们说过了,我们动态添加路由的时机就是二个,初始化和登录时候,所以我们现在就完成最后的部分。
//vuex中的user.js模块
//动态添加路由
import{mapMenu}from@/util/map-menu.js//前面封装的函数
state:{
mutations:{
actions:{
asyncloginUser({dispatch,commit},info){
constloginRes=awaitloginUser(info)
if(loginRes.uName){
if(!cache.getCache(jxcms-token)){
ElMessage({
message:登录成功!,
type:success
commit(changeUser,loginRes)
//本地存储
文档评论(0)