为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 XML和string相互转化实现代码
Jul 04 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
Jun 02 Javascript
JavaScript中原型链存在的问题解析
Sep 25 Javascript
js封装tab标签页实例分享
Dec 19 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
Sep 14 Javascript
小程序封装路由文件和路由方法(5种全解析)
May 26 Javascript
详解elementui之el-image-viewer(图片查看器)
Aug 30 Javascript
JavaScript使用localStorage存储数据
Sep 25 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 Javascript
OpenLayer学习之自定义测量控件
Sep 28 Javascript
JavaScript实现随机点名小程序
Oct 29 Javascript
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
新版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 url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
JS继承用法实例分析
2015/02/05 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
Python常用算法学习基础教程
2017/04/13 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
英语教学随笔感言
2014/02/20 职场文书
中秋晚会策划方案
2014/06/12 职场文书