vue2若依后台管理系统路由自定义参数

最近在新增页面时,手动添加了路由自定义参数:

然后发现手动添加自定义参数会在生成路由表时也将参数添加进去,由此会导致路由出现错误,页面出现404。

为了解决这个问题,我们需要找到项目中生成路由表的文件,对路由进行改造:

// 向后端请求路由数据
        getRouters().then(res => {
         
          //增加一组全屏路由
          var temp = []
          res.data.forEach(menu_item=>{
            if(menu_item.children!=undefined){
              menu_item.children.forEach(ele=>{
                let path = ele.path;
                if (path.includes('?')) {
                  // 只保留'?'前面的部分,并提取查询参数
                  const [pathWithoutQuery, query] = path.split('?');
                  ele.path = pathWithoutQuery;
                  // 将查询参数保留到路由的meta中
                  ele.meta = ele.meta || {};
                  ele.meta.query = query;
              }
                var menu =JSON.parse(JSON.stringify(ele))
                if(menu.path == 'overviewScreen'){
                  menu.path = "/full"+"/" +menu.path
                  menu.name = "full_"+menu.name
                }else{
                  menu.path = "/full"+menu_item.path+"/" +menu.path
                  menu.name = "full_"+menu.name
                }
               
                temp.push(menu)
              })
            }
          })
          const sdata = JSON.parse(JSON.stringify(res.data))

          //添加到非显示路由
          temp.forEach(ele=>{
            res.data.push(ele)
          })

          const rdata = JSON.parse(JSON.stringify(res.data))
          const sidebarRoutes = filterAsyncRouter(sdata)
          const rewriteRoutes = filterAsyncRouter(rdata, false, true)
          rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
          commit('SET_ROUTES', rewriteRoutes)
          commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))
          commit('SET_DEFAULT_ROUTES', sidebarRoutes)
          commit('SET_TOPBAR_ROUTES', sidebarRoutes)
          resolve(rewriteRoutes)
        })

使用const [pathWithoutQuery, query] = path.split('?');将路由数据分割成两部分,pathWithoutQuery是我们需要的路由部分,query是我们手动给路由添加的自定义参数,在这里将query保存到路由的ele.meta.query中,方便我们在路由导航守卫那里把自定义的参数给添加到地址栏。

接下来我们找到路由导航守卫文件进行修改,添加代码:

if(to.meta.query){
          // 路由跳转不支持携带自定义参数的跳转,需要分割后再重新添加上去。
          const query = { ...to.query }
        if (typeof to.meta.query === 'string') {
          const metaQueryObject = parseQueryString(to.meta.query);
          Object.assign(query, metaQueryObject);
        }
          next();
          setTimeout(() => {
            const newQuery = {...query}; // 添加自定义参数
            router.replace({ path: to.path, query: newQuery });
            }, 0);
            
        } else {
          next();

      }

//在拦截函数之外添加方法
const parseQueryString = (queryString) => {
  const params = new URLSearchParams(queryString);
  const queryObject = {};
  params.forEach((value, key) => {
    queryObject[key] = value;
  });
  return queryObject;
}

注意1:记得添加setTimeout或者其他异步将参数添加到地址栏,一定要等页面进行跳转后再添加,不然还是会报错出现404.

注意2:若是参数携带了/,如:page=index/home,地址栏会自动将/转换成%2显示,使用地址栏参数时需要注意这一点。

这样子写就能成功的实现跳转页面并且参数也在地址栏中显示,效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值