vue中props賦值給data出現(xiàn)的問題及解決
vue props賦值給data問題
vue 中父組件向子組件傳遞數(shù)據(jù)用 props, 但是子組件是無法修改它的。
如果子組件需要動態(tài)修改它就只能自造一個對應(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里面,因為data()只會運行一次,所以要用watch來進行監(jiān)聽props里面內(nèi)容的變化,然后對data里面進行賦值
?watch:{ ? ? formDatas(news,olds){ ? ? ? this.form = news ? ? } ? }
因此當父組件傳遞值給子組件的時候,watch就會監(jiān)聽到formDatas的變化,將新的值賦給你想要傳值的data,然后進行改變。
props賦值給data 數(shù)據(jù)變化
問題:當組件props里的某個值(a)(a值要是對象引用類型的數(shù)據(jù))賦給了data對象里的某個值 (b); 當a值發(fā)生了變化,b值還是最開始的a值, 但實際應(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>
原因:因為data深拷貝的props的值,data無法隨著props的變化而更新;
解決:watch、computed可以解決
<template> ?? </template> ? <script> export default { ? ? name:'child ' ? ? props:{ ? ? ? ? a:{ ? ? ? ? ? ? type:Object ? ? ? ? } ? ? }, ? ? data(){ ? ? ? ? return{ ? ? ? ? ? ? b:this.a ? ? ? ? } ? ? }, ? ? watch:{ ? ? ? ? a(val){ ? ? ? ? ? ? //當a值變化時 ? ? ? ? ? ? this.b = this.a ? ? ? ? } ? ? }, ? ? mounted(){ ? ? ? ? //a值改變后打印b值 ? ? ? ? ?console.log("b",this.b) //打印出來就是最新值了 ? a:{a1:2} ? ? } } </script> ? <style> ? </style>
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于vue-property-decorator的基礎(chǔ)使用實踐
這篇文章主要介紹了關(guān)于vue-property-decorator的基礎(chǔ)使用實踐,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08vue中swiper?vue-awesome-swiper的使用方法及各種坑解決
這篇文章主要介紹了vue中swiper?vue-awesome-swiper的使用方法及各種坑解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01vue v-for 點擊當前行,獲取當前行數(shù)據(jù)及event當前事件對象的操作
這篇文章主要介紹了vue v-for 點擊當前行,獲取當前行數(shù)據(jù)及event當前事件對象的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09詳解用vue2.x版本+adminLTE開源框架搭建后臺應(yīng)用模版
這篇文章主要介紹了用vue2.x版本+adminLTE開源框架 搭建后臺應(yīng)用模版,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03