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 相关文章推荐
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
Nov 06 Javascript
js表数据排序 sort table data
Feb 18 Javascript
js parsefloat parseint 转换函数
Jan 21 Javascript
javascript 构造函数强制调用经验总结
Dec 02 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
Sep 05 Javascript
微信小程序通过api接口将json数据展现到小程序示例
Jan 20 Javascript
深入理解Javascript中的作用域链和闭包
Apr 25 Javascript
实战node静态文件服务器的示例代码
Mar 08 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
jQuery实现简单弹幕效果
Nov 28 jQuery
JavaScript文档加载模式以及元素获取
Jul 28 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
Python实现的二维码生成小软件
2014/07/11 Python
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
python的文件操作方法汇总
2017/11/10 Python
Python 查看文件的读写权限方法
2018/01/23 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
python issubclass 和 isinstance函数
2019/07/25 Python
python通过http下载文件的方法详解
2019/07/26 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
团委竞选演讲稿
2014/04/24 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书
2014年妇女工作总结
2014/12/06 职场文书
2019各种保证书范文
2019/06/24 职场文书
如何用python反转图片,视频
2021/04/24 Python
详解Js模块化的作用原理和方案
2021/04/29 Javascript