在Vue的前端開發(fā)中,我們常常需要使用checkbox組件。而在Vue的父子組件中,如何使用checkbox組件呢?
首先,在父組件中,我們需要定義一個(gè)data屬性來存儲(chǔ)checkbox的選中狀態(tài):
data: { checkList: [] }
此時(shí),我們可以在模板中使用v-for來動(dòng)態(tài)渲染多個(gè)checkbox,并綁定到checkList數(shù)組中:
<div v-for="item in itemList" :key="item.id"> <input type="checkbox" :value="item.id" v-model="checkList"> {{item.name}} </div>
在子組件中,我們需要依賴props來接收父組件傳來的數(shù)據(jù),包括checkbox的選中狀態(tài)。首先,定義一個(gè)props數(shù)組接收checkList:
props: { checkList: { type: Array, default: [] } }
然后,在子組件的模板中,我們也使用v-for來動(dòng)態(tài)渲染checkbox,并綁定其選中狀態(tài)為父組件傳來的checkList數(shù)組中的值:
<div v-for="item in itemList" :key="item.id"> <input type="checkbox" :value="item.id" :checked="checkList.includes(item.id)" @change="changeHandler"> {{item.name}} </div>
注意我們使用change事件監(jiān)聽checkbox的改變,并且定義了一個(gè)changeHandler方法來實(shí)時(shí)更新父組件中checkList的值:
methods: { changeHandler() { this.$emit('update:checkList', this.checkList) } }
此時(shí),我們已經(jīng)實(shí)現(xiàn)了在父組件中動(dòng)態(tài)渲染多個(gè)checkbox,并獲取其選中狀態(tài),同時(shí)將選中狀態(tài)傳遞到子組件中并動(dòng)態(tài)渲染。但是當(dāng)我們?cè)谧咏M件中選中一個(gè)checkbox時(shí),父組件的checkList并不會(huì)實(shí)時(shí)更新。為了實(shí)現(xiàn)此功能,我們需要使用.sync修飾符來實(shí)現(xiàn)雙向數(shù)據(jù)綁定:
<child-component :checkList.sync="checkList"></child-component>
現(xiàn)在,無(wú)論是在父組件中還是子組件中,只要選中了一個(gè)checkbox,另一個(gè)組件的checkList也會(huì)實(shí)時(shí)更新。
總結(jié):通過使用v-model和.sync修飾符,我們可以在Vue的父子組件中實(shí)現(xiàn)checkbox的雙向數(shù)據(jù)綁定,并實(shí)時(shí)獲取其選中狀態(tài)。