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

  

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

  

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

  

  

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

  

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

  

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

  

commonjs语法:常量设置=解决=比;要求。确保([],()=比;解决(需要(“。/组件/setting.vue”),“设置”);

  

文档的写法:解决=祝辞要求([。/组件/setting.vue)],解决);//懒加载

  

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

  

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

  

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

  

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

  

  

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

  

  

<强> HTML:

        & lt;输入类型=鞍磁ァ盄click=皊howchild”价值=" https://www.yisu.com/zixun/show "比;//点击按钮后,显示为真,先获取孩子组件,再渲染div内容   & lt; div id="包含" v=靶恪北?   & lt; child> & lt;/child>   & lt;/div>      

<强> JS:

     //?   数据(){   返回{   味精:“欢迎来到你的Vue。js应用”,   显示:假   }   },   方法:{   showchild:函数(){   this.show=true;   }   },   组件:{   “孩子”:函数(解决){   需要([’。//子组件。vue '],解决);   }   之前      

  

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

  

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

  

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

  

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

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