vue中props賦值給data出現(xiàn)的問(wèn)題及解決
vue props賦值給data問(wèn)題
vue 中父組件向子組件傳遞數(shù)據(jù)用 props, 但是子組件是無(wú)法修改它的。
如果子組件需要?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
? },這樣是無(wú)法把props的值傳遞給data里面,因?yàn)閐ata()只會(huì)運(yùn)行一次,所以要用watch來(lái)進(jìn)行監(jiān)聽(tīng)props里面內(nèi)容的變化,然后對(duì)data里面進(jìn)行賦值
?watch:{
? ? formDatas(news,olds){
? ? ? this.form = news
? ? }
? }因此當(dāng)父組件傳遞值給子組件的時(shí)候,watch就會(huì)監(jiān)聽(tīng)到formDatas的變化,將新的值賦給你想要傳值的data,然后進(jìn)行改變。
props賦值給data 數(shù)據(jù)變化
問(wèn)題:當(dāng)組件props里的某個(gè)值(a)(a值要是對(duì)象引用類(lèi)型的數(shù)據(jù))賦給了data對(duì)象里的某個(gè)值 (b); 當(dāng)a值發(fā)生了變化,b值還是最開(kāi)始的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) //打印出來(lái)是a:{a1:1}
//a值改變后打印b值
console.log("b",this.b) //打印出來(lái)還是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無(wú)法隨著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) //打印出來(lái)就是最新值了 ? a:{a1:2}
? ? }
}
</script>
?
<style>
?
</style>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue npm install 安裝某個(gè)指定的版本操作
這篇文章主要介紹了vue npm install 安裝某個(gè)指定的版本操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
vue常用事件v-on:click詳解事件對(duì)象,事件冒泡,事件默認(rèn)行為
這篇文章主要介紹了vue常用事件之v-on:click?以及事件對(duì)象,事件冒泡,事件默認(rèn)行為,其實(shí)v-on后面跟的不止是click事件也可以是其他的事件,用法均相似,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Vue iview-admin框架二級(jí)菜單改為三級(jí)菜單的方法
這篇文章主要介紹了Vue iview-admin框架二級(jí)菜單改為三級(jí)菜單的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
vue中格式化時(shí)間過(guò)濾器代碼實(shí)例
這篇文章主要介紹了vue格式化時(shí)間過(guò)濾器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Vue全局監(jiān)測(cè)錯(cuò)誤并生成錯(cuò)誤日志實(shí)現(xiàn)方法介紹
在做完一個(gè)項(xiàng)目后,之后的維護(hù)尤為重要。這時(shí),如果項(xiàng)目配置了錯(cuò)誤日志記錄,這樣能大大減少維護(hù)難度。雖然不一定能捕獲到全部的錯(cuò)誤,但是一般的錯(cuò)誤還是可以監(jiān)測(cè)到的。這樣就不用測(cè)試人員去一遍一遍復(fù)現(xiàn)bug了2022-10-10

