解決vue組件props傳值對象獲取不到的問題

這篇文章主要介紹了vue組件props傳值,對象獲取不到的問題,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑑價值,需要的朋友可以參考下

先說問題,父組件利用props向子組件傳值,瀏覽器 console 有這個值,但是獲取不到內部的屬性,困了我3個小時,真的**

personal
console

以下爲原代碼

1、home.vue(父組件)--personal是被傳的參數

<!--子組件-->
<form-picker class="form-picker"
 :personal="personal"
>
</form-picker>
export default {
  data(){
    return{
      personal:{
        state:'',////判斷是修改狀態,還是新增狀態 add/edit
        data:[]
      }
    }
  },
  mounted(){
   this.$api.personal.searchPersonalInfo(this.userInfo.userId).then((res)=>{
     this.personal.data = res.data.data //這裏給personal對象賦值接口傳來的數據
    })
  },
}

2、formPicker (子組件) --接收personal

export default {
  props:['active','personal'],
  mounted(){
    console.log(149,this.personal)
    console.log(150,this.personal.state)
  }
}

運行結果

明明149行有 state 值,150行輸出卻沒有了,是不是超級奇怪

後面經過大佬的講解,其實瀏覽器console.log也是應該沒有的

所以,其實我們子組件一開始根本就沒有取到這個personal這個對象。

3、解決方法--使用watch

父組件

export default {
  data(){
    return{
      personal:{
        state:'',////判斷是修改狀態,還是新增狀態 add/edit
        data:[]
      }
    }
  },
  mounted(){
   this.$api.personal.searchPersonalInfo(this.userInfo.userId).then((res)=>{
     //this.personal.data = res.data.data //這裏給personal對象賦值接口傳來的數據
     //使用以下方法重新賦值,上面方法watch監聽不到,具體什麼原因,我也不清楚,知道的告知我!謝謝
     this.personal = {
      data: res.data.data,
      state: 'edit'
     }
    })
  },
}

接下來子組件就能 watch 到 personal 了 子組件

watch:{
   personal(newValue,oldValue){
    console.log(181,newValue) 
   },
/** 輸出
    {
      data: res.data.data,
      state: 'edit'
     }
**/
  }

總結

以上所述是小編給大家介紹的解決vue組件props傳值對象獲取不到的問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對神馬文庫網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章