vue中props賦值給data出現(xiàn)的問題及解決
vue props賦值給data問題
vue 中父組件向子組件傳遞數(shù)據(jù)用 props, 但是子組件是無法修改它的。
如果子組件需要?jiǎng)討B(tài)修改它就只能自造一個(gè)對應(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)容的變化,然后對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值要是對象引用類型的數(shù)據(jù))賦給了data對象里的某個(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ì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02Vue中如何動(dòng)態(tài)顯示表格內(nèi)容
這篇文章主要介紹了Vue中如何動(dòng)態(tài)顯示表格內(nèi)容問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10關(guān)于vue-property-decorator的基礎(chǔ)使用實(shí)踐
這篇文章主要介紹了關(guān)于vue-property-decorator的基礎(chǔ)使用實(shí)踐,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue中swiper?vue-awesome-swiper的使用方法及各種坑解決
這篇文章主要介紹了vue中swiper?vue-awesome-swiper的使用方法及各種坑解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01vue v-for 點(diǎn)擊當(dāng)前行,獲取當(dāng)前行數(shù)據(jù)及event當(dāng)前事件對象的操作
這篇文章主要介紹了vue v-for 點(diǎn)擊當(dāng)前行,獲取當(dāng)前行數(shù)據(jù)及event當(dāng)前事件對象的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09詳解用vue2.x版本+adminLTE開源框架搭建后臺應(yīng)用模版
這篇文章主要介紹了用vue2.x版本+adminLTE開源框架 搭建后臺應(yīng)用模版,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03vue-cli入門之項(xiàng)目結(jié)構(gòu)分析
本篇文章主要介紹了vue-cli入門之項(xiàng)目結(jié)構(gòu),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04