简单的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基础教程之变量
Jan 18 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
Mar 01 Javascript
javascript制作sql转换为stringBuffer的小工具
Apr 03 Javascript
详解Javascript事件驱动编程
Jan 03 Javascript
js querySelector() 使用方法
Dec 21 Javascript
详解javascript中的变量提升和函数提升
May 24 Javascript
jquery分页插件pagination使用教程
Oct 23 jQuery
详解Vue2.0组件的继承与扩展
Nov 23 Javascript
jquery层次选择器的介绍
Jan 18 jQuery
elementUI select组件默认选中效果实现的方法
Mar 25 Javascript
JavaScrip数组去重操作实例小结
Jun 20 Javascript
js实现简单抽奖功能
Nov 24 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中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
柯基袜:Corgi Socks
2017/01/26 全球购物
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
美术师范毕业生自荐信
2013/11/16 职场文书
农民入党思想汇报
2014/01/03 职场文书
绘画专业自荐信
2014/07/04 职场文书
项目经理岗位职责
2015/01/31 职场文书
分家协议书范本
2016/03/22 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
Redis数据同步之redis shake的实现方法
2022/04/21 Redis