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跨域刷新实现代码
Jan 01 Javascript
Javascript图像处理思路及实现代码
Dec 25 Javascript
js操作checkbox遇到的问题解决
Jun 29 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
Sep 04 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
Dec 15 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
Apr 12 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
Bootstrap CSS组件之按钮下拉菜单
Dec 17 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
Mar 05 Javascript
详解Webpack多环境代码打包的方法
Aug 03 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 Javascript
原生js实现移动小球(碰撞检测)
Dec 17 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
php之readdir函数用法实例
2014/11/13 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
一些高难度的SQL面试题
2016/11/29 面试题
中文师范生自荐信
2014/01/30 职场文书
行政主管职责范本
2014/03/07 职场文书
文明寄语大全
2014/04/11 职场文书
项目建议书模板
2014/05/12 职场文书
慈善晚会策划方案
2014/05/14 职场文书
计算机专业自荐信
2014/05/24 职场文书
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技