为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 left,right,mid函数
Jun 10 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 Javascript
JS实现两个大数(整数)相乘
Apr 28 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
May 08 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
Aug 07 Javascript
javascript生成大小写字母
Jul 03 Javascript
jQuery+HTML5美女瀑布流布局实现方法
Sep 21 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 Javascript
使用express来代理服务的方法
Jun 21 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
Apr 29 Javascript
详解vue-router的Import异步加载模块问题的解决方案
May 13 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
Search Engine Friendly的URL设计
2006/10/09 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
微信红包随机生成算法php版
2016/07/21 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
js方法数据验证的简单实例
2016/09/17 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
vue+mock.js实现前后端分离
2019/07/24 Javascript
Python描述器descriptor详解
2015/02/03 Python
Python常用的爬虫技巧总结
2016/03/28 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
银行介绍信范文
2014/01/10 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
出租房屋协议书
2014/09/14 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
交通事故协议书范文
2014/10/23 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
经验交流材料格式
2014/12/30 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
react如何快速设置文件路径别名
2021/04/28 Javascript
go类型转换及与C的类型转换方式
2021/05/05 Golang
MySQL系列之三 基础篇
2021/07/02 MySQL