最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Vue的加載順序探討

 更新時(shí)間:2017年10月25日 10:42:07   作者:蟻方陣  
本篇文章主要介紹了Vue的加載順序探討,詳細(xì)的介紹了加載順序以及如何判斷所有的子組件加載完成。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在Vuejs 1.0版本中,如果父子組件進(jìn)行配合,它們的生命周期執(zhí)行具有如下特點(diǎn):

1. created總是先父后子

生命周期函數(shù)created總是按照從父到子的順序依次執(zhí)行,但是兄弟之間沒(méi)有嚴(yán)格按照這樣的順序執(zhí)行,估計(jì)是采用了異步函數(shù),不僅如此,子組件在父組件中的插入順序也是隨機(jī)的,并沒(méi)有什么特別的規(guī)律。假定子組件的引用順序如下:

<div class="container">
 <child-c1 v-ref:child1></child-c1>
 <child-c2 v-ref:child2></child-c2>
</div>

如果采用$children引用來(lái)獲取所有的子組件,那么”child-c1”并不總是處于第一個(gè)位置,如下:

 // 大多數(shù)時(shí)候判斷會(huì)失敗
 if(this.$children[0] === this.$refs.child1) {
  // 這里的代碼很可能得不到執(zhí)行機(jī)會(huì)
 }

2. ready的順序更混亂

按照我的估計(jì),父子組件的ready順序應(yīng)該是先子后父,這樣才能保證組件完全加載完成,但從實(shí)踐的實(shí)例來(lái)看,ready完全沒(méi)有順序,有時(shí)候是父組件先加載完成,也有時(shí)候是子組件先加載完成,所以在編程實(shí)踐中,絕對(duì)不可以依賴(lài)他們的加載順序。

3. 結(jié)論

在實(shí)踐中,如果需要保障組件依次加載完成,絕對(duì)不可以依賴(lài)組件的生命順序,也不能依賴(lài)父子組件的ready生命周期。

如何判斷所有的子組件加載完成

在父子組件的配合使用中,尤其是配置信息與業(yè)務(wù)信息相分離的情況下,我們經(jīng)常需要在所有的子組件加載完成后,再執(zhí)行父組件的相關(guān)服務(wù),以如下的組件結(jié)構(gòu)為例:

 <jq-grid :url="url" col-size="5" :sub-grid="true" ref="accountGrid" :on-ready="initGrid" :query="queryParams">
 <jq-col label="賬號(hào)" name="username" width="75" :sortable="true"></jq-col>
 <jq-col label="用戶(hù)名稱(chēng)" name="remarkName" width="75" :sortable="true"></jq-col>
 <jq-col label="創(chuàng)建時(shí)間" name="createTime" width="90">
 </jq-col>
</jq-grid> 

在上面的例子中,我們需要組合子組件的配置信息,因此,只有所有的子組件加載完成,組合的配置信息才能準(zhǔn)確完整。

所以,如果直接用mounted事件(1.0中為ready事件),則一定得到不正確的結(jié)果,為了解決此問(wèn)題,我們不妨生命如下的數(shù)據(jù)結(jié)構(gòu)與方法:

props : {
 colSize : {
  type : Number,
  default : 1
 }
}

data () {
 return {
  // 用于獲取所有的子組件配置信息
  colModel : [],
  readySize : 0
 }
},

methods : {
 /**
  * 由子組件在加載完成時(shí)調(diào)用
  */
 addColModel () {
   this.readySize ++
   // 檢查進(jìn)度是否設(shè)置的colSize一致
   if(this.readySize == this.colSize) {
   // 這時(shí)候所有的子組件已加載完成
   } 
 }
}

通過(guò)設(shè)置配置項(xiàng)“colSize”與檢查子組件調(diào)用的方法“addColModel”,我們可確定所有子組件加載完成的時(shí)刻(此時(shí)父組件有可能加載完成,也可能未加載完成),從而進(jìn)行必要的配置信息整理操作。

但是在實(shí)際應(yīng)用中,我們發(fā)現(xiàn),如果子組件的數(shù)量較多時(shí),會(huì)發(fā)生另外一種現(xiàn)象,子組件加載順序會(huì)隨機(jī)發(fā)生,如果要保證加載順序與配置順序一致,我們可以在子組件中加入“order”屬性,如下,最新配置內(nèi)容如下:

<jq-grid :url="url" col-size="8" :sub-grid="true" ref="hostGrid" :on-ready="initGrid" :query="queryParams">
 <jq-col order="1" label="名稱(chēng)" name="hostName" width="75" :sortable="true" ></jq-col>
 <jq-col order="2" label="主機(jī)型號(hào)" name="model" width="60" :sortable="true"></jq-col>
 <jq-col order="3" label="生產(chǎn)廠(chǎng)商" name="vendor" width="60" :sortable="true"></jq-col>
</jqgrid> 

經(jīng)過(guò)這樣的處理,我們可以在所有子組件加載完成對(duì)其進(jìn)行排序,如下:

// 由于Vue無(wú)法確定子元素的加載順序,必須手動(dòng)指定order
this.colModel.sort((a, b) => a.order - b.order)

結(jié)論

通過(guò)手動(dòng)添加輔助變量與方法,可以獲取子組件加載完成的時(shí)刻,從而執(zhí)行整合性操作。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue自定義loader將行內(nèi)樣式px轉(zhuǎn)rem適配

    vue自定義loader將行內(nèi)樣式px轉(zhuǎn)rem適配

    這篇文章主要為大家介紹了vue自定義loader將行內(nèi)樣式px轉(zhuǎn)rem適配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • vue 1.0 結(jié)合animate.css定義動(dòng)畫(huà)效果

    vue 1.0 結(jié)合animate.css定義動(dòng)畫(huà)效果

    本文分步驟給大家介紹了Vue 1.0自定義動(dòng)畫(huà)效果,vue1.0代碼結(jié)合animate.css定義動(dòng)畫(huà),頁(yè)面一定要引入animate.cdd,具體實(shí)例代碼大家參考下本文
    2018-07-07
  • Vue實(shí)現(xiàn)二維碼的展示及下載功能

    Vue實(shí)現(xiàn)二維碼的展示及下載功能

    這篇文章主要介紹了Vue實(shí)現(xiàn)二維碼的展示及下載功能,其中downloadQRCode()函數(shù)中的url為要下載的文件的路徑,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • vue3?頭像上傳?組件功能實(shí)現(xiàn)

    vue3?頭像上傳?組件功能實(shí)現(xiàn)

    這篇文章主要介紹了vue3頭像上傳組件功能,用到了自定義組件v-model的雙向綁定,使用axios + formData 上傳文件,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • vue3+vite+TS中使用element-plus按需引入ElLoading、ElMessage樣式失效解決

    vue3+vite+TS中使用element-plus按需引入ElLoading、ElMessage樣式失效解決

    在項(xiàng)目中使用elementui確實(shí)是很方便的一件事,下面這篇文章主要給大家介紹了關(guān)于vue3+vite+TS中使用element-plus按需引入ElLoading、ElMessage樣式失效解決的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • MAC+PyCharm+Flask+Vue.js搭建系統(tǒng)

    MAC+PyCharm+Flask+Vue.js搭建系統(tǒng)

    最近新做了個(gè)項(xiàng)目,使用的是MAC+PyCharm+Flask+Vue.js搭建系統(tǒng),本文就來(lái)分享一下搭建步驟,感興趣的可以了解一下
    2021-05-05
  • Vue如何使用Dayjs計(jì)算常用日期詳解

    Vue如何使用Dayjs計(jì)算常用日期詳解

    這篇文章主要給大家介紹了關(guān)于Vue如何使用Dayjs計(jì)算常用日期的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Vue2.x Todo之自定義指令實(shí)現(xiàn)自動(dòng)聚焦的方法

    Vue2.x Todo之自定義指令實(shí)現(xiàn)自動(dòng)聚焦的方法

    我們希望用戶(hù)雙擊 todo 進(jìn)入編輯狀態(tài)后輸入框自動(dòng)獲取焦點(diǎn),而不是需要先手動(dòng)點(diǎn)一下。這篇文章主要介紹了Vue 2.x Todo之自定義指令實(shí)現(xiàn)自動(dòng)聚焦,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2019-01-01
  • 解決electron打包vue-element-admin項(xiàng)目頁(yè)面無(wú)法跳轉(zhuǎn)的問(wèn)題小結(jié)

    解決electron打包vue-element-admin項(xiàng)目頁(yè)面無(wú)法跳轉(zhuǎn)的問(wèn)題小結(jié)

    這篇文章主要介紹了解決electron打包vue-element-admin項(xiàng)目頁(yè)面無(wú)法跳轉(zhuǎn)的問(wèn)題小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • Vue零基礎(chǔ)入門(mén)之模板語(yǔ)法與數(shù)據(jù)綁定及Object.defineProperty方法詳解

    Vue零基礎(chǔ)入門(mén)之模板語(yǔ)法與數(shù)據(jù)綁定及Object.defineProperty方法詳解

    這篇文章主要介紹了Vue初學(xué)基礎(chǔ)中的模板語(yǔ)法、數(shù)據(jù)綁定、Object.defineProperty方法等基礎(chǔ),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09

最新評(píng)論

镇沅| 信阳市| 九台市| 临泽县| 江孜县| 峡江县| 彭山县| 三门县| 广元市| 资中县| 都匀市| 思茅市| 桐庐县| 霍州市| 孟连| 卓尼县| 鄂尔多斯市| 随州市| 景洪市| 江北区| 肥西县| 泊头市| 甘谷县| 滦南县| 朝阳县| 延安市| 商丘市| 永清县| 绵竹市| 蒙城县| 松桃| 博罗县| 寿阳县| 大新县| 平南县| 崇礼县| 谷城县| 景德镇市| 大兴区| 修水县| 都江堰市|