解決vue父組件調(diào)用子組件只執(zhí)行一次問題
一、問題
開發(fā)中,需求是將內(nèi)容展示作為一個組件,輸入為contentId,請求在組件中,只需根據(jù)父組件傳過來的contentId去請求內(nèi)容的詳情即可。但是過程中卻發(fā)現(xiàn)一個問題,第一次打開彈框,展示內(nèi)容沒問題,但是接下來的多次點擊發(fā)現(xiàn)一直是第一次請求的數(shù)據(jù),也就是說,內(nèi)容詳情并未再次發(fā)生改變。
二、原因
在父組件中引用的子組件標簽上添加屬性,來渲染可以擁有不同數(shù)據(jù)的子組件。但是vue 的組件有個特點,如果我們這一次和上一次傳過去的屬性值一樣的話,watch 監(jiān)聽的屬性因為沒有新的變化(這次的值和上一次的值一樣watch 中調(diào)用的函數(shù)不執(zhí)行),導(dǎo)致對應(yīng)的數(shù)據(jù)也沒有變化。created() 生命周期函數(shù)也是只執(zhí)行一次。但是有時候我們需要這個組件每次都重新生成dom 元素,每次都執(zhí)行created() 函數(shù)。這時候就用到了vue中的key 屬性。
三、解決方案
<template> <div> <div> <h1>父級</h1> <button @click="handleLoad">點擊重新加載子級</button> </div> <children :key="timer"></children> </div> </template> <script> import children from '@/components/parent/children' export default { name: 'parent', components: { children }, data () { return { timer: '' } }, methods: { handleLoad () { this.timer = new Date().getTime() } } } </script>
總結(jié):
其實解決問題的本質(zhì)只要可以讓彈框這個dom元素每次打開重新加載一次,就會解決。
只要是一個變量即可促使dom刷新,例如:v-if、v-show、當前時間戳、或者在子組件使用watch監(jiān)聽
到此這篇關(guān)于解決vue父組件調(diào)用子組件只執(zhí)行一次問題的文章就介紹到這了,更多相關(guān)vue父組件調(diào)用子組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vueJs實現(xiàn)DOM加載完之后自動下拉到底部的實例代碼
這篇文章主要介紹了vueJs實現(xiàn)DOM加載完成之后自動下拉到底部的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08