国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue+webpack實現異步組件加載的方法

2019-11-19 14:25:17
字體:
來源:轉載
供稿:網友

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實現異步組件加載的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 房山区| 左贡县| 仙游县| 怀柔区| 洪洞县| 琼海市| 聂荣县| 舞阳县| 台州市| 曲阜市| 房产| 儋州市| 珲春市| 丰原市| 南平市| 边坝县| 轮台县| 绥棱县| 应城市| 罗平县| 凤庆县| 宕昌县| 元氏县| 客服| 玛纳斯县| 台安县| 山西省| 蓬安县| 汝城县| 郑州市| 黑山县| 五华县| 龙井市| 连州市| 南靖县| 抚远县| 靖江市| 尚志市| 无极县| 兴海县| 四川省|