vue+webpack实现异步组件加载的方法


Posted in Javascript onFebruary 03, 2018

8.9更新:之前想搬迁到csdn的时候由于邀请码问题迟迟没把博客转过来,所以跑去博客园了,今天发现csdn已经帮我把文章搬过来,有必要修正一下这篇文章。

写这篇文章的时候因为刚接触vue,所以捣鼓的时候有些迷糊。

----------------/*以下可以跳过*/-----------------

本来很简单的事情折腾好久。

1.vue文档只给出了Vue.component('comp_name',function(resolve,reject){})在回调里ajax加载组件定义内容的例子,但现在习惯.vue文件写组件,在点击路由获取.vue的时候怎么弄呢?

2.webpack的coding-split支持commonjs/amd语法,即有不同的实现。网上查了n多案例乱七八糟的,最后确定两种写法

commonjs语法:const setting = resolve => require.ensure([], ()=> resolve(require('./components/setting.vue')),'setting');

文档的写法:resolve =>require(['./components/setting.vue')],resolve);//懒加载

当时我是结合了路由一起练习,用的第一种,在github上看到的,require.ensure是webpack的语法,在打包的时候将require.ensure部分指定的代码切割出来打包在另一个chunk上,webpack.config.js里面加上chunkFileName项即可。require.ensure的三个参数分别是:依赖的url,回调,自定义的chunk的名字。

其实,code split本质上就是,将你require的模块单独出来另外打包,等用到的时候再由浏览器发起异步获取,并通过scriptdom的形式插入到head中,这是它的底层实现。我自己尝试的时候,每获取一次异步组件,head中都会插入两个标签,一个script,yigestyle,因为.vue文件最终会解析成html,css和js。

PS:其实webpack官网的示例代码并没有resolve=>这种写法,直接在函数里require.ensure就是了,一开始有点疑惑,网上找不到讲解,自己研究发现require.ensure这个函数,webpack打包编译之后

是一个_webpack_require_.e的函数,其本身是一个一个thenable实例,require.ensure的回调放到_webpack_require_.e.then(fn)里面,这下子就很明显了,webpack的这个语法本身应该是一个promise实例,只是上面获取vue组件的写法里,因为require.ensure是封装好的语法,只好把resolve传入其父函数中,在require.ensure的回调里通过作用域链获取并调用。这也揭露了,resolve函数不一定要在promise的函数参数中,其出现位置可以灵活设置,在阮一峰老师的ES6入门里提到过,resolve函数是js引擎能提供的,不需要自己部署。

------------------/*以上可跳过*/------------------

首先,异步组件的使用没刚接触时以为的那么复杂。

1.如果套用官网的方式是可以的:

HTML:

<input type="button" @click="showchild" value="show"> //点击按钮后,show为真,先获取child组件,再渲染div内容
<div id="contain" v-if="show">
 <child></child>
 </div>

JS:

//...
data () {
  return {
   msg: 'Welcome to Your Vue.js App',
   show:false
  }
 },
 methods: {
  showchild:function(){
   this.show=true;
   }
 },
 components: {
   'child': function(resolve) {
    require(['./components/child.vue'], resolve);
 }

*注意:加载异步组件的时候,组件名后边的.vue不要忽略。

这个例子应该比较直观了。点击按钮之后改变了变量show的布尔值为真,由于child.vue是异步组件,所以会先ajax获取组件然后渲染。

在很多情况下异步组件会配合vue-router使用来切换视图,其实这时候用哪种语法的都可以。

vue+webpack实现异步组件加载的方法

以上这篇vue+webpack实现异步组件加载的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript小技巧 2.5 则
Sep 12 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
table insertRow、deleteRow定义和用法总结
May 14 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
javascript实现表格增删改操作实例详解
May 15 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
Dec 21 Javascript
谈谈第三方App接入微信登录 解读
Dec 27 Javascript
Bootstrap源码解读模态弹出框(11)
Dec 28 Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
Aug 25 Javascript
微信小程序 组件的外部样式externalClasses使用详解
Sep 06 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
基于vue-resource jsonp跨域问题的解决方法
Feb 03 #Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
Feb 03 #Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 #Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 #Javascript
JavaScript实现求最大公共子串的方法
Feb 03 #Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
Feb 03 #Javascript
js删除数组中的元素delete和splice的区别详解
Feb 03 #Javascript
You might like
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
js实现关闭网页出现是否离开提示
2017/12/07 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
15分钟上手vue3.0(小结)
2020/05/20 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
如何高效率的查找一个月以内的数据
2012/04/15 面试题
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
聘用意向书范本
2014/04/01 职场文书
创先争优宣传标语
2014/10/08 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
2014年教学工作总结
2014/11/13 职场文书
网络营销计划
2015/01/17 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server