简单的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 相关文章推荐
“不能执行已释放的Script代码”错误的原因及解决办法
Sep 09 Javascript
node.js中的fs.fstat方法使用说明
Dec 15 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
Node.js与Sails redis组件的使用教程
Feb 14 Javascript
js return返回多个值,通过对象的属性访问方法
Feb 21 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
Feb 23 Javascript
jQuery编写textarea输入字数限制代码
Mar 23 jQuery
js获取地址栏参数的两种方法
Jun 27 Javascript
如何去除vue项目中的#及其ie9兼容性
Jan 11 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
Aug 24 Javascript
JavaScript中构造函数与原型链之间的关系详解
Feb 25 Javascript
js实现手表表盘时钟与圆周运动
Sep 18 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数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
Django实现简单分页功能的方法详解
2017/12/05 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Python求解正态分布置信区间教程
2019/11/20 Python
Python实现搜索算法的实例代码
2020/01/02 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
外贸销售员求职的自我评价
2013/11/23 职场文书
缴纳养老保险的证明
2014/01/10 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
高考学习决心书
2015/02/04 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
2016公司新年问候语
2015/11/11 职场文书
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android