简单的Vue异步组件实例Demo


Posted in Javascript onDecember 27, 2017

前言

在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载。为了进一步简化,Vue.js 允许将组件定义为一个工厂函数,异步地解析组件的定义。Vue.js 只在组件需要渲染时触发工厂函数,并且把结果缓存起来,用于后面的再次渲染。

为什么需要异步组件,道理和webpack的按需加载是一样的,如果一开始就加载所有的组件,那么是比较耗时的,所以我们可以将一些组件定义为异步组件,在需要使用的时候再进行加载。

所以好处的话就显而易见了 :

  • 按需加载,可以节省首次加载的时间,提高速度,也算是一个性能优化。
  • 那么一个组件可能会被使用多次,按需加载的话也不会加载多次,第一次加载完成就会缓存下来,和webpack是一样的,所以不用担心

最近读Vue文档的时候仔细看了一下异步组件部分,第一次看的时候一脸懵逼,看第二次还是有点迷茫,第三次就有点感觉了,第四次感觉有点明白了,遂记录一下,下面是我写的一个简单Vue异步组件Demo。

实例代码

index.html

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="viewport"
   content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible"
   content="ie=edge">
  <title>Document</title>
  <script>
   // 如果浏览器不支持Promise就加载promise-polyfill
   if ( typeof Promise === 'undefined' ) {
    var script = document.createElement( 'script' );
    script.type = 'text/javascript';
    script.src = 'https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js';
    document.head.appendChild( script );
   }
  </script>
  <!-- 引入Vue -->
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
 </head>
 <body>
  <div id="app" style="font-size: 22px">
   <!-- 异步组件async-comp -->
   <async-comp :list="['我是一个异步组件,','如果加载完成,','我就会在这里显示']"></async-comp>
  </div>

  <!-- 引入main.js  -->
  <script src="/main.js"></script>
 </body>
</html>

异步组件Async-Comp.js,

注意,Async-Comp.js并没有在index.html中引用,而是在下面的main.js中动态加载。

window.async_comp = {
 template: '\
  <ol>\
   <li v-for="item in list">{{ item }}</li>\
  </ol>',
 props: {
  list: Array
 }
};

main.js

var vm = new Vue( {
 el: '#app',
 components: {
  /* 异步组件async-comp */
  'async-comp': function () {
   return {
    /** 要渲染的异步组件,必须是一个Promise对象 */
    component: new Promise( function ( resolve, reject ) {
     var script = document.createElement( 'script' );
     script.type = 'text/javascript';
     script.src = '/Async-Comp.js';
     document.head.appendChild( script );
     script.onerror = function () {
      reject( 'load failed!' );
     }

     script.onload = function () {
      if ( typeof async_comp !== 'undefined' )
       resolve( async_comp );
      else reject( 'load failed!' )
     }
    } ),
    /* 加载过程中显示的组件 */
    loading: {
     template: '<p>loading...</p>'
    },
    /* 出现错误时显示的组件 */
    error: {
     template: '\
      <p style="color:red;">load failed!</p>\
     '
    },
    /* loading组件的延迟时间 */
    delay: 10,
    /* 最长等待时间,如果超过此时间,将显示error组件。 */
    timeout:3200
   }
  }
 }
} )

github地址:点击这里

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
地址栏上的一段语句,改变页面的风格。(教程)
Apr 02 Javascript
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
Nov 24 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
jquery重复提交请求的原因浅析
May 23 Javascript
js限制文本框只能输入数字方法小结
Jun 16 Javascript
bootstrap使用validate实现简单校验功能
Dec 02 Javascript
Angular.js中定时器循环的3种方法总结
Apr 27 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
js实现div色块拖动录制
Jan 16 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 Javascript
JavaScript 中判断变量是否为数字的示例代码
Oct 22 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 #Javascript
全面介绍vue 全家桶和项目实例
Dec 27 #Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
Dec 27 #jQuery
使用jQuery 操作table 完成单元格合并的实例
Dec 27 #jQuery
浅谈vue-router 路由传参的方法
Dec 27 #Javascript
关于laydate.js加载laydate.css路径错误问题解决
Dec 27 #Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
Dec 27 #Javascript
You might like
php获取mysql数据库中的所有表名的代码
2011/04/23 PHP
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
js style动态设置table高度
2014/10/21 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
javascript编写简易计算器
2017/05/06 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python获取央视节目单的实现代码
2015/07/25 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
局领导领导班子四风对照检查材料
2014/09/27 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript