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 相关文章推荐
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 Javascript
JS处理VBArray的函数使用说明
May 11 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
Nov 07 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
Apr 26 Javascript
JS实现支持多选的遍历下拉列表代码
Aug 20 Javascript
javascript对象的相关操作小结
May 16 Javascript
jquery表单提交带错误信息提示效果
Mar 09 Javascript
关于Node.js的events.EventEmitter用法介绍
Apr 01 Javascript
详解Angularjs 自定义指令中的数据绑定
Jul 19 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
微信小程序实现拍照画布指定区域生成图片
Jul 18 Javascript
Vue使用NProgress进度条的方法
Sep 21 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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
PHP源代码数组统计count分析
2011/08/02 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
JavaScript Prototype对象
2009/01/07 Javascript
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
大学生就业自荐信
2013/10/26 职场文书
绝对经典成功的大学生推荐信
2013/11/08 职场文书
2015年个人思想总结
2015/03/09 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书