为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 相关文章推荐
深入理解JavaScript系列(13) This? Yes,this!
Jan 18 Javascript
jQuery设置div一直在页面顶部显示的方法
Oct 24 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
Dec 19 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
前端面试知识点锦集(JavaScript篇)
Dec 28 Javascript
Bootstrap超大屏幕的实现代码
Mar 22 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
May 26 Javascript
w3c编程挑战_初级脚本算法实战篇
Jun 23 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
javascript编程开发中取色器及封装$函数用法示例
Aug 09 Javascript
Echarts之悬浮框中的数据排序问题
Nov 08 Javascript
jQuery实现视频展示效果
May 30 jQuery
新版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
PHP 引用是个坏习惯
2010/03/12 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
Javascript Select操作大集合
2009/05/26 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
使用python实现画AR模型时序图
2019/11/20 Python
pytorch 常用线性函数详解
2020/01/15 Python
python实现TCP文件传输
2020/03/20 Python
python中id函数运行方式
2020/07/03 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
Internet主要有哪些网络群组成
2015/12/24 面试题
党委书记岗位职责
2013/11/24 职场文书
化学教师自荐信范文
2013/12/28 职场文书
工地安全标语
2014/06/07 职场文书
小学社团活动总结
2014/06/27 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
2016高考感言
2015/08/01 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫
使用Ajax实现无刷新上传文件
2022/04/12 Javascript