美文网首页
vue动态路由

vue动态路由

作者: 学而时习之不易 | 来源:发表于2018-09-17 11:38 被阅读0次

    项目中打算是用后台控制路由的,简单实现了一下后台路由的实现方案。
    使用的是 vue2中的 addRoutes 方法,实现的过程中遇到几个问题。
    1.浏览器刷新之后,addRoutes添加的路由会丢失
    2.组件懒加载的时候,无法识别传进来的字符串变量
    这2个问题后面已经解决了,下面先上代码

    //******************************************* 后台动态路由 和 调试 方法块 *****************************************************
    
    router.beforeEach(function (to, from, next) {
        var dynamicRouterListStr = localStorage.getItem('router');
        if (dynamicRouterListStr != null) {
            if (store.state.router == null || store.state.router.length == 0) {
                var routerList = modalRouterList(JSON.parse(dynamicRouterListStr));
                if (! routerList instanceof Array) {
                    routerList = [];
                }
                routerList.push(        {
                path : '*',
                redirect : '/error'
            }
            )
                store.commit('setRouter', routerList);
                router.addRoutes(routerList);
                next({ ...to, replace: true })
                
            }else{
                next();
            }
        }else{
        next();
    }
    });
    
    
    
    function modalRouterList(list){
        console.log(list)
        var tempList = [];
        list.forEach(ele => {
            var obj = {};
            obj['path'] = ele['path'];
            obj['name'] = ele['name'];
            obj['component'] = (resolve) => require([`@/${ele['source']}.vue`], resolve);
            tempList.push(obj);
        })
    
        return tempList;
    }
    
    //******************************************* 后台动态路由 和 调试 方法块 *****************************************************
    

    解决刷新路由丢失问题
    1.从后台获取到路由信息后,把路由信息保存了 localStoreage中,路由每次加载的时候,判断localStoreage信息加载。
    2.router.addRoutes是异步的,所以把全局的跳转 *也动态添加了,同时使用 next({ ...to, replace: true })重新载入。

    解决组件懒加载字符串问题


    image.png

    把字符串变量分割开来,require中 用 @ + 变量 + .vue的方式加载即可。

    相关文章

      网友评论

          本文标题:vue动态路由

          本文链接:https://www.haomeiwen.com/subject/fzmknftx.html