【开发日记】Vue2动态路由踩坑指南

前言

背景是对一个Vue2的老项目进行动态路由改造,原来是静态路由。

踩坑指南

1、component中的@符号不能由服务端返回,因为很可能会识别成其他内容。

component = () => import(`@/${route.component}`);

**2、**子路由的path不能以/开头,根路由的path必须以/开头。

**3、**使用router.addRoute(route)来动态添加路由。

import router from "@/core/router";
...
router.addRoute(route);

实现步骤

1、创建vue-router对象

以下是router.js内容。

import Vue from "vue";
import Router from "vue-router";
export const constantRoutes[...公共静态路由...];
export default new Router({
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRoutes,
    base: "/"
})

2、初始化Vue

正常通过new创建Vue对象,main.js示例如下:

import router from '@/core/router.js'
import Vue from 'vue'
import App from './App.vue'

let vue=new Vue({
      router,
      render: h => h(App),
}).$mount('#app');

3、动态添加路由

addRoutes: function (routes) {
    return new Promise((resolve, reject) => {
        try {
            routes.forEach(item => {
            	//addRoute函数时自定义的,根据自己的业务逻辑编写 
                let route = this.addRoute(item); 
                router.addRoute(route);
            });
            resolve(); // 所有路由添加完成后调用 resolve()
        } catch (error) {
            reject(error); // 如果发生错误调用 reject()
        }
    });
},

4、添加动态路由的时机

存在三个添加动态路由的时机。

第一个是当前用户登录成功后获取当前用户拥有的权限页面路由进行添加。

第二个是刷新了网页后动态路由会被清空,此时应监听刷新页面并重新添加。

第三个是第一次打开页面,但无需重新登录(记住登录状态)需要重新添加路由。

5、监听页面刷新

在监听页面刷新时应判断是否符合刷新路由的条件,比如本地缓存中没有路由信息。在下一次切换界面时即调用添加动态路由的方法。

window.onbeforeunload = function () {//刷新会触发这个事件  
    if(判断是否符合条件){
        // 写入缓存表示需要更新路由
      	sessionStorage.setItem("RefreshRouter", false);
    }
};

6、设置路由前置守卫配置

设置路由前置守卫配置主要就是用来监听用户切换界面,如果用户在切换界面之前刷新了浏览器,那么系统需要在用户切换界面之前重新添加动态路由。

router.beforeEach((to, from, next) => {
      RouterUtils.refreshRouter(router,to).then(() => {
            // 其他逻辑
            next()
      })
});

refreshRouter函数中判断RefreshRouter缓存是否需要重新添加路由。

结语

本人主攻方向是后端,此流程不一定是最优解,也可能存在一些问题,欢迎留言讨论。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值