vue中props賦值給data出現(xiàn)的問題及解決
vue props賦值給data問題
vue 中父組件向子組件傳遞數(shù)據(jù)用 props, 但是子組件是無法修改它的。
如果子組件需要?jiǎng)討B(tài)修改它就只能自造一個(gè)對(duì)應(yīng)的 data 域。
比如:
components:{Tinymce},
? props:['id','formDatas'],
? data() {
? ? return {
? ? ? form: {
? ? ? ? title: '',
? ? ? ? title_type: '',
? ? ? ? push_date: '',
? ? ? ? source: '',
? ? ? ? title_introduce: '',
? ? ? ? title_content:'',
? ? ? }
? ? }
? },
? created(){
? ? this.form = this.formDatas
? },這樣是無法把props的值傳遞給data里面,因?yàn)閐ata()只會(huì)運(yùn)行一次,所以要用watch來進(jìn)行監(jiān)聽props里面內(nèi)容的變化,然后對(duì)data里面進(jìn)行賦值
?watch:{
? ? formDatas(news,olds){
? ? ? this.form = news
? ? }
? }因此當(dāng)父組件傳遞值給子組件的時(shí)候,watch就會(huì)監(jiān)聽到formDatas的變化,將新的值賦給你想要傳值的data,然后進(jìn)行改變。
props賦值給data 數(shù)據(jù)變化
問題:當(dāng)組件props里的某個(gè)值(a)(a值要是對(duì)象引用類型的數(shù)據(jù))賦給了data對(duì)象里的某個(gè)值 (b); 當(dāng)a值發(fā)生了變化,b值還是最開始的a值, 但實(shí)際應(yīng)該是b值是最新的a值
例如
<template>
</template>
<script>
export default {
name:'child '
props:{
a:{
type:Object
}
},
data(){
return{
b:this.a
}
},
mounted(){
console.log("b",this.b) //打印出來是a:{a1:1}
//a值改變后打印b值
console.log("b",this.b) //打印出來還是a:{a1:1}
}
}
</script>
<style>
</style>
<!-------------------------------------------------------->
<template>
<!---引用子組件--->
<child :a="a"></child>
</template>
<script>
export default {
data(){
return{
a:{
a1:1
}
}
},
mounted(){
//改變a值
this.a.a1 = 2
}
}
</script>
<style>
</style>原因:因?yàn)閐ata深拷貝的props的值,data無法隨著props的變化而更新;
解決:watch、computed可以解決
<template>
??
</template>
?
<script>
export default {
? ? name:'child '
? ? props:{
? ? ? ? a:{
? ? ? ? ? ? type:Object
? ? ? ? }
? ? },
? ? data(){
? ? ? ? return{
? ? ? ? ? ? b:this.a
? ? ? ? }
? ? },
? ? watch:{
? ? ? ? a(val){
? ? ? ? ? ? //當(dāng)a值變化時(shí)
? ? ? ? ? ? this.b = this.a
? ? ? ? }
? ? },
? ? mounted(){
? ? ? ? //a值改變后打印b值
? ? ? ? ?console.log("b",this.b) //打印出來就是最新值了 ? a:{a1:2}
? ? }
}
</script>
?
<style>
?
</style>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vite版本更新檢查實(shí)現(xiàn)頁面自動(dòng)刷新的解決思路
這篇文章主要給大家介紹了關(guān)于Vite版本更新檢查實(shí)現(xiàn)頁面自動(dòng)刷新的解決思路,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02
Vue中如何動(dòng)態(tài)顯示表格內(nèi)容
這篇文章主要介紹了Vue中如何動(dòng)態(tài)顯示表格內(nèi)容問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
關(guān)于vue-property-decorator的基礎(chǔ)使用實(shí)踐
這篇文章主要介紹了關(guān)于vue-property-decorator的基礎(chǔ)使用實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue中swiper?vue-awesome-swiper的使用方法及各種坑解決
這篇文章主要介紹了vue中swiper?vue-awesome-swiper的使用方法及各種坑解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
vue v-for 點(diǎn)擊當(dāng)前行,獲取當(dāng)前行數(shù)據(jù)及event當(dāng)前事件對(duì)象的操作
這篇文章主要介紹了vue v-for 點(diǎn)擊當(dāng)前行,獲取當(dāng)前行數(shù)據(jù)及event當(dāng)前事件對(duì)象的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
詳解用vue2.x版本+adminLTE開源框架搭建后臺(tái)應(yīng)用模版
這篇文章主要介紹了用vue2.x版本+adminLTE開源框架 搭建后臺(tái)應(yīng)用模版,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03
vue-cli入門之項(xiàng)目結(jié)構(gòu)分析
本篇文章主要介紹了vue-cli入門之項(xiàng)目結(jié)構(gòu),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04

