为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对象所有属性和方法的函数
Oct 16 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
Jun 14 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
Aug 27 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
Jun 01 Javascript
JavaScript中Cookies的相关使用教程
Jun 04 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
Sep 21 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
Jan 26 Javascript
使用javascript插入样式
Mar 14 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
Apr 10 Javascript
详解搭建一个vue-cli的移动端H5开发模板
Jan 17 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
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
基于jquery的气泡提示效果
2010/05/31 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
python生成指定长度的随机数密码
2014/01/23 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python实现类之间的方法互相调用
2018/04/29 Python
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
专升本自我鉴定
2013/10/10 职场文书
酒店管理求职信范文
2014/04/06 职场文书
保护环境建议书400字
2014/05/13 职场文书
工会工作先进事迹
2014/08/18 职场文书
新课培训心得体会
2014/09/03 职场文书
婚礼家长致辞
2015/07/27 职场文书
初中英语教学随笔
2015/08/15 职场文书