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 继承详解(三)
Jul 13 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
点击表单提交时出现jQuery没有权限的解决方法
Jul 23 Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 Javascript
js与css实现弹出层覆盖整个页面的方法
Dec 13 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
BootStrap按钮标签及基本样式
Nov 23 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
Feb 21 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
Apr 26 Javascript
聊聊Vue 中 title 的动态修改问题
Jun 11 Javascript
Vue.js实现备忘录功能
Jun 26 Javascript
详解基于Vue/React项目的移动端适配方案
Aug 23 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+javascript液晶时钟
2006/10/09 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
Python操作列表之List.insert()方法的使用
2015/05/20 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
Python转换时间的图文方法
2019/07/01 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
python opencv进行图像拼接
2020/03/27 Python
python爬虫用mongodb的理由
2020/07/28 Python
python安装及变量名介绍详解
2020/12/12 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
领导干部培训感言
2014/01/23 职场文书
英语国培研修感言
2014/02/13 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python