为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题


Posted in Javascript onApril 03, 2018

用过vue-router都知道它可以实现模块js的懒加载,即只有当需要时才去加载对应模块的js脚本文件,以加速主页的显示。比如只有第一次用户点击某个“用户信息”按钮或菜单时,才下载“用户信息”这个模块的js组件。

懒加载的实现,依赖与webpack下AMD模式require函数的功能。webpack会将异步require的文件生成一个独立的js文件,调用时异步下载这个js且在完成后再执行它。开发项目中实现的关键代码是:

const basicInfo = {
  path: '/user',
  component: resolve => require(['./basicInfo.vue'], resolve) 
}
//然后将这个basicInfo加入路由表中

但是这里有个问题:从用户点击“用户信息”菜单开始,到js文件下载完毕执行开始,由于从网络下载js有一个时间延迟,这期间用户界面是没有任何响应的,让用户感觉点上去无效,常会重复再次点击。特别是js文件大而网速慢时更明显。因此,在这个过程中添加一个Loading的加载提示很有必要。

我们分析这行代码:

resolve => require(['./basicInfo.vue'], resolve)

它是一个函数,执行了require的过程,完成后再调用resolve回调函数。我们只要封装一下,在require执行之前显示Loading,然后在加载完成执行回调的时候隐藏Loading,也就实现这个需求了。如下:

const basicInfo = {
  path: '/user',
  component: resolve => {
    [显示Loading]
    require(['./basicInfo.vue'], component => {
      [隐藏Loading]
      resolve(component)
    })
  }
};

显示和隐藏Loading的代码,可根据自己的UI框架处理就行。比如element-ui:

import { Loading } from 'element-ui';
var unique;
export default {
  show() {
    let opt = {body: true, text: 'Loading...'};
    if(!unique) unique = Loading.service(opt);
  },
  resolve(resolve) {
    return function (component) {
      if (unique) {
        unique.close();
        unique = null;
      }
      resolve(component)
    }
  }
}
const basicInfo = {
  path: '/user',
  component: resolve => {
    spinRoute.show();
    require(['./basicInfo.vue'], spinRoute.resolve(resolve))
  }
};

以上在vue-router 2.3.1通过。

总结

以上所述是小编给大家介绍的为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
使用JS进行目录上传(相当于批量上传)
Dec 05 Javascript
firebug的一个有趣现象介绍
Nov 30 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
Aug 23 Javascript
jquery进行数组遍历如何跳出当前的each循环
Jun 05 Javascript
JavaScript中九种常用排序算法
Sep 02 Javascript
jQuery中:text选择器用法实例
Jan 03 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 Javascript
详解从买域名到使用pm2部署node.js项目全过程
Mar 07 Javascript
Vuejs开发环境搭建及热更新【推荐】
Sep 07 Javascript
基于better-scroll 实现歌词联动功能的代码
May 07 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
Apr 03 #Javascript
使用react实现手机号的数据同步显示功能的示例代码
Apr 03 #Javascript
JS遍历DOM文档树的方法实例详解
Apr 03 #Javascript
JavaScript同源策略和跨域访问实例详解
Apr 03 #Javascript
vue 组件中slot插口的具体用法
Apr 03 #Javascript
react 实现页面代码分割、按需加载的方法
Apr 03 #Javascript
深入浅析Vue中的slots/scoped slots
Apr 03 #Javascript
You might like
咖啡与牛奶
2021/03/03 冲泡冲煮
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
新闻专业个人自我评价
2013/09/21 职场文书
艺术系应届生的自我评价
2013/10/19 职场文书
车工岗位职责
2013/11/26 职场文书
毕业生求职的求职信
2013/12/05 职场文书
python状态机transitions库详解
2021/06/02 Python
Nginx四层负载均衡的配置指南
2021/06/11 Servers
分析Python list操作为什么会错误
2021/11/17 Python
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技