Vue 路由按需加载(路由懒加载)

需求:vue前后端分离的项目中,需要动态加载所有的菜单项,我们无法在router.js里提前注册路由信息。

解决: 需要我们按需注册路由(即运行时注册)

步骤(1)后端传来的component一般都是字符串,我们需将其格式化成对象,然后按需注册。

export const formatRoutes = (routes) => {
    let fmRoutes = [];
    routes.forEach(router => {
        //批量定义数据 后端传来的menu对象里的属性
        let {
            path,
            component,
            name,
            meta,
            iconCls,
            children
        } = router;
        //递归子菜单
        if(children && children instanceof Array){
            children = formatRoutes(children)
        }
        let fmRouter = {
        	//path 路径 name 组件的名字
            path: path,
            name: name,
            iconCls: iconCls,
            meta: meta,
            //children是子菜单项
            children: children,
            //按需加载
            component(resolve) {
                if (component.startsWith("Home")) {
                	//第一个参数就是组件里的位置
                    require(['../views/' + component + '.vue'], resolve);
                } else if (component.startsWith("Emp")) {
                    require(['../views/emp/' + component + '.vue'], resolve);
                } else if (component.startsWith("Per")) {
                    require(['../views/per/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sal")) {
                    require(['../views/sal/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sta")) {
                    require(['../views/sta/' + component + '.vue'], resolve);
                } else if (component.startsWith("Sys")) {
                    require(['../views/sys/' + component + '.vue'], resolve);
                }
            }
        }
        fmRoutes.push(fmRouter)
    })
    return fmRoutes
}

(2)将返回的fmRoutes数组添加至路由中。

		  //data是后端的json字符串
		  let fmtRoutes = formatRoutes(data);
          router.addRoutes(fmtRoutes);

此时我们已经将菜单项注册进路由了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值