vue router 懒加载常见写法

其他router相关内容索引

序号内容连接地址
1vue router 整合引入https://blog.csdn.net/qq_21271511/article/details/109368459
2vue router 模块化开发https://blog.csdn.net/qq_21271511/article/details/109369247
3vue router 动态路由及菜单实现之一https://blog.csdn.net/qq_21271511/article/details/109496415
4vue router 动态路由及菜单实现之二https://blog.csdn.net/qq_21271511/article/details/109998976
5vue router 动态路由及菜单实现问题汇总https://blog.csdn.net/qq_21271511/article/details/110038256
6vue el-menu多级菜单递归https://blog.csdn.net/qq_21271511/article/details/109889934
7vue router 懒加载常见写法https://blog.csdn.net/qq_21271511/article/details/109776741

vue router 懒加载

当项目越来越大,router越加越多,且用户一次性不会访问那么多的router,所以需要在用户访问的时候将router加载上,这样可以很好的提升用户体验

懒加载写法

三种常见的写法

//遍历后台传来的路由字符串,转换为组件对象
export function filterAsyncRouter(asyncRouterMap) { 
    // console.log("asyncRouterMap"+asyncRouterMap);
    const accessedRouters = asyncRouterMap.filter(route => {
        if (route.component) {
            if (route.component === 'system') {
                route.component = system
            } else {
                // console.log("load:" + loadView(route.component));
                route.component = loadView(route.component)
                // console.log("import:" + __import(route.component));
                // route.component = __import(route.component)
            }
        }
        if (route.children && route.children.length) {
            route.children = filterAsyncRouter(route.children)
        }
        return true
    })
    return accessedRouters
}
/* 加载路由组件,两种方式均可 */
const loadView = (view) => { // 路由懒加载
    // return (resolve) => require([`@/views/${view}`], resolve)
    // return () => import('@/views/' + view)
    return () => Promise.resolve(require(`@/views/${view}`))
}

第一种

一般的写法,require是 AMD规范引入方式

return (resolve) => require([`@/views/${view}`], resolve)

第二种

直接将组件引入的方式,import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法

return () => import('@/views/' + view)

cli 构建项目时例子里用的就是import,推荐也是使用import来引入模块

第三种

和第一种本质一样,都是使用require获取到组件,再用Promise对象返回组件

return () => Promise.resolve(require(`@/views/${view}`))

扩展

import 和require 比较

  1. import 是解构过程并且是编译时执行
  2. require 是赋值过程并且是运行时才执行,也就是异步加载
  3. require的性能相对于import稍低,因为require是在运行时才引入模块并且还赋值给某个变量

import webpack时的问题

注意:返回import表达式 在webpack 构建的时候会报这个警告
在这里插入图片描述

Critical dependency: the request of a dependency is an expression

意思就是这个请求的依赖是一个表达式

这个时候动态加载路由实际没有加载上去,这时候就换成第三种写法就可以了。import实际返回的也是一个promise对象

官网的说法:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

忙碌的菠萝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值