为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 命名空间以提高代码重用性
Nov 13 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 Javascript
javascript dom 操作详解 js加强
Jul 13 Javascript
动态改变div的z-index属性的简单实例
Aug 08 Javascript
js实现局部页面打印预览原理及示例代码
Jul 03 Javascript
原生js实现百叶窗效果及原理介绍
Apr 12 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
详解swiper在vue中的应用(以3.0为例)
Sep 20 Javascript
vue--vuex详解
Apr 15 Javascript
vue微信分享的实现(在当前页面分享其他页面)
Apr 16 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
Sep 06 Javascript
如何利用javascript接收json信息并进行处理
Aug 06 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开启gzip页面压缩实例代码
2010/03/11 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
详解Python的Django框架中的模版相关知识
2015/07/15 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python3中的bytes和str类型详解
2019/05/02 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
pytorch 共享参数的示例
2019/08/17 Python
Python谱减法语音降噪实例
2019/12/18 Python
python实现经纬度采样的示例代码
2020/12/10 Python
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
中国最大的名表商城:万表网
2016/08/29 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
高中自我评价分享
2013/12/05 职场文书
创先争优制度
2014/01/21 职场文书
女子职高个人自荐书
2014/02/01 职场文书
写景作文评语集锦
2014/12/25 职场文书
餐厅开业活动方案
2019/07/08 职场文书
详解Python中的for循环
2022/04/30 Python
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL