vue父組件向子組件傳值,不實時更新解決
在運用vue搭建項目將頁面分成各個組件時,時常會遇到將父組件的請求到的數據傳入子組件用於操作顯示,然后將操作好的數據從子組件傳出,因為vue經驗不常用就會將其遺忘,所以特此將所閱讀到並有所獲的博客修改后記錄下來,防止技術遺忘。
現在我們創建一個template子組件,子組件命名為hi-popSelect,並在父組件引入。
// 父組件引用
<hi-popSelect :isShow="isShowData" @func="getMsg"></hi-popSelect>
// 在父組件中的子組件標簽中創建一個自定義屬性isShow,將父組件的data里面的isShowData數據傳入給子組件
// @func為子組件中傳回來的為key值為func的數值
// getMsg則為父組件的函數,
// getMsg會將傳入的func對應的數值傳入自己的函數變量參數value,從而觸發此函數
import popSelect from '../components/popSelect';
components: {
'hi-popSelect': popSelect
},
data(){
return {
isShowData: false //data屬性,用於父組件傳入子組件參數
}
}
methods: {
getMsg (data) {
this.isShowData = data;
},
}
創建子組件hi-popSelect:
<el-dialog class="hi-dialog" :visible.sync="currentIsShow">
</el-dialog>
// 父子傳參(父傳子)
props: ['isShow'],
// isShow為在父組件中的子組件標簽中自定義的屬性名
data(){
return {
currentIsShow: this.isShow,
// 在data里重新賦值,不改變父組件傳值,
// this.isShow指代的是props里面的參數isShow
}
}
watch: {
// 因為在vue生命周期中子組件創建后只會賦一次值,之后父組件數值變化了,
// 子組件的數值也會變化,但顯示的數據不會發生改變。
// 所以需要監聽父組件傳參變化重新賦值讓子組件重新賦值。
// 此處的isShow並不是函數,而是對應的要賦值的變量名isShow
isShow (val) {
this.currentIsShow = val;
}
},
methods: {
// 關閉對話框並把值傳給父組件 (子傳父),此函數未調用
// 函數作用是當觸發此函數時子組件會將key值為func的數值傳給父組件,
// this.currentIsShow為變量值
hideData () {
this.$emit('func', this.currentIsShow);
},
}
最后,非常感謝原博客博主,地址: 原博客地址