简单的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 相关文章推荐
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 Javascript
基于jquery的获取浏览器窗口大小的代码
Mar 28 Javascript
探讨javascript是不是面向对象的语言
Nov 21 Javascript
js charAt的使用示例
Feb 18 Javascript
jquery分页插件jpaginate在IE中不兼容问题
Apr 22 Javascript
JS实现页面超时后自动跳转到登陆页面
Jan 19 Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 Javascript
JavaScript获取URL中参数querystring的方法详解
Oct 11 Javascript
jQuery插件ajaxFileUpload异步上传文件
Oct 19 Javascript
vue监听滚动事件实现滚动监听
Apr 11 Javascript
Js和VUE实现跑马灯效果
May 25 Javascript
解决Element中el-date-picker组件不回填的情况
Nov 07 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实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
Python学习笔记(二)基础语法
2014/06/06 Python
Python实现通讯录功能
2018/02/22 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
python logging设置level失败的解决方法
2020/02/19 Python
python如何更新包
2020/06/11 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
怎样自定义一个异常类
2016/09/27 面试题
迎接领导欢迎词
2014/01/11 职场文书
老师给学生的表扬信
2014/01/17 职场文书
项目建议书模板
2014/05/12 职场文书
文化建设工作方案
2014/05/12 职场文书
给学校的建议书范文
2014/05/15 职场文书
小学教师读书活动总结
2014/07/08 职场文书
药品开票员岗位职责
2015/04/15 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers