鍍金池/ 問答/HTML/ vue父組件props修改子組件的v-model值報錯

vue父組件props修改子組件的v-model值報錯

如下圖所示:
使用了mint-ui的tabbar,在父組件中通過props修改selected的值報錯,請問各位大神父組件如何修改子組件中的v-model綁定的值呢?謝謝各位的回答
clipboard.png
報錯:
clipboard.png

回答
編輯回答
女流氓

@jadestrong 的思路是對的

你截圖的所示的組件,已經(jīng)是<mt-tabbar>的父組件了,為什么需要再封裝一層讓再上一級的爺爺組件來傳遞selected呢?如果的確需要這樣的組件樹結(jié)構(gòu)的話,則應(yīng)該在截圖所示的組件中使用事件$emit告知爺爺組件更新selected值.然后父組件接收的props值也會自動更新的.

但從我看你問題描述中,感覺像是對組件間數(shù)據(jù)傳遞有點誤解.就你這個用例來看

<template>
  <mt-tabbar v-model="selected">...<mt-tabbar>
</template>
<script>
export default {
  data () {
    return {
      selected: '1'
    }
  }
}
</script>

selected是父組件專遞給子組件(<mt-tabbar>)的,所以selected在父組件中應(yīng)該是組件內(nèi)狀態(tài)(對應(yīng)vue就是data hook中的數(shù)據(jù)).

而<mt-tabbar>的v-model應(yīng)該本來就實現(xiàn)了組件間數(shù)據(jù)傳遞的雙向綁定(不確定,我沒有用過),而你上面會報錯,是因為<mt-tabber>切換的時候并不是想改變父組件的data,而是想改變爺爺組件的data,所以才會出錯,如果你要改變爺爺組件的data,應(yīng)該在父組件中再加一層$emit或是其他像sync一類的語法糖.

2018年1月11日 03:11
編輯回答
別逞強

你這是在mt-tabbar的外面又包了一層,上面截圖是你自己封裝的一個組件? 然后,你定義props在調(diào)用這個組件的父組件里面動態(tài)修改selected? 如果是這樣,你可以在父組件上使用selected.sync語法,你可以文檔查下.sync和update:selected的使用.

另外,我覺得你本身用的是組件了,不需要再包一層,用props來聲明吧,直接在那個頁用data來聲明不更好

2017年6月25日 16:57
編輯回答
情未了

如果你想父組件改變model,自組件能實時接到,子組件去watch這個model。
如果你想子組件改變model,同步給父組件,那么你在改子組件model的時候,綁定this.$emit("model",model)
父組件@model="modelFunc",modelFunc類似于function,去接收就好了

2018年7月31日 16:18