Vue — el-dialog 父子組件,子組件數(shù)據(jù)更新

el-dialog 是 element-ui 的一個(gè)對(duì)話框 組件

組件:需要設(shè)置visible屬性,它接收Boolean,當(dāng)為true時(shí)顯示 Dialog。

場(chǎng)景:

  1. 子組件中 使用 el-dialog 且 子組件 呈現(xiàn) 服務(wù)器返回的列表數(shù)據(jù), 父組件觸發(fā)某事件,顯示子組件對(duì)話框。

  2. 子組件每次show出 顯示最新列表。

存在問題: 子組件 每次show 出 不能去 執(zhí)行created() 函數(shù)。導(dǎo)致列表為第一次數(shù)據(jù)

原因: 子父組件的生命周期順序

  1. 加載渲染過程
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

  1. 子組件的更新過程
父beforeUpdate->子beforeUpdate->子updated->父updated

  1. 父組件的更新過程
父beforeUpdate->父updated

  1. 銷毀過程
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

由于 渲染時(shí)候,父組件渲染時(shí) - 父組件生命周期執(zhí)行,緊接著子組件也進(jìn)行渲染執(zhí)行,這時(shí)候子組件created() 函數(shù) 已經(jīng)獲取到了列表數(shù)據(jù)。

created() 函數(shù)是 在模板渲染成html前調(diào)用,即通常初始化某些屬性值,然后再渲染成視圖。

所以 再次觸發(fā)父組件事件 ,并不會(huì)觸發(fā)渲染子組件 ,這時(shí)候 created() 函數(shù)中的 更新列表方法 不會(huì)執(zhí)行,列表數(shù)據(jù)仍然為上一次的數(shù)據(jù)。

解決辦法 : 兩種

第一種:父組件中設(shè)置 v-if

利用 v-if 實(shí)現(xiàn) 子組件主動(dòng)渲染, 執(zhí)行 created() 函數(shù), 達(dá)到更新列表數(shù)據(jù)。

<div v-if="dialogFormVisible">

// 子組件調(diào)用

  <checkStatis

    :dialog-form-visible="dialogFormVisible"

    :modal-data="modalData"

    @closeBtn="closeModal"

  />

</div>

優(yōu)點(diǎn): 處理簡(jiǎn)單

缺點(diǎn): 根據(jù)表達(dá)式的值的來有條件地渲染元素,采用組件銷毀、重建的方式 。(不是很推薦)切換性能消耗大

第二種:子組件使用 watch 監(jiān)聽

父組件 觸發(fā)子組件開啟時(shí) , 設(shè)置 時(shí)間戳 變量,并傳遞給子組件,通過props 接收。

// 父組件事件函數(shù)

handleBtn() {

  this.showTimeNum = +new Date()

}

// 父組件中使用子組件

<subscribe :showTime="showTimeNum"/>

子組件 通過watch 監(jiān)聽 showTime 達(dá)到列表更新

// 設(shè)置接收類型以及默認(rèn)值

props: {

  showTime: {

  type: Number,

  default: 0

  }

}

// 子組件 Element

<el-dialog :visible.sync="show" :close-on-click-modal="false"title="子組件對(duì)話框"       @close="closeBtn">

...... 列表數(shù)據(jù)展示

</el-dialog>

// 監(jiān)聽 變化 獲取新的列表數(shù)據(jù)

watch: {

  showTime() {

    this.show = true

    this.getList() // 獲取列表方法

  }

},

缺點(diǎn): 比第一種能麻煩些

優(yōu)點(diǎn):數(shù)據(jù)驅(qū)動(dòng)dom呈現(xiàn)。

END————————

碼字不易,如果喜歡或者對(duì)你有絲毫幫助的話,幫忙點(diǎn)個(gè)?? 哈,點(diǎn)贊就是我的動(dòng)力。

同時(shí)也希望自己能堅(jiān)持認(rèn)真的寫下去,因?yàn)樵诳偨Y(jié)提升自己的同時(shí)如果也能幫助更多的前端,那是多么開心的一件事。

小伙伴們 這里有更好的建議或方法,歡迎評(píng)論,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽閱讀 10,925評(píng)論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,503評(píng)論 1 3
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,984評(píng)論 2 7

友情鏈接更多精彩內(nèi)容