简单的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 相关文章推荐
JavaScript URL参数读取改进版
Jan 16 Javascript
JavaScript高级程序设计 DOM学习笔记
Sep 10 Javascript
javascript 进阶篇2 CSS XML学习
Mar 14 Javascript
ajax上传时参数提交不更新等相关问题
Dec 11 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
jQuery实现垂直半透明手风琴特效代码分享
Aug 21 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
Jul 28 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
微信小程序上传文件到阿里OSS教程
May 20 Javascript
vue 解决异步数据更新问题
Oct 29 Javascript
javascript实现时钟动画
Dec 03 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中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
详解Python中dict与set的使用
2015/08/10 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
Django URL参数Template反向解析
2020/11/24 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
创建市级文明单位实施方案
2014/03/01 职场文书
药剂专业求职信
2014/06/20 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
2016年元旦主持词
2015/07/06 职场文书
新学期家长寄语2016
2015/12/03 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书