你應該做的第一件事是價值觀和v-模型綁定到你的複選框:
<input type="checkbox" :id="subregion[0].subregion" v-model="subregionCheck" :value="subregion[0].subregion">
<input type="checkbox" :id="country.name" v-model="countryCheck" :value="country.name">
而在你的數據添加subregionCheck和countryCheck的數組:
data: {
subregions: null,
countries: null,
query: '',
countryList: [],
subregionCheck:[],
countryCheck: []
},
這些陣列作爲服務我們複選框的標記:如果它們包含單個複選框的值,它將被檢查。在開始時他們都是空的。
在接下來的步驟中,我們應該爲子區域創建一個偵聽器複選框和一個用於檢查該子區域的所有國家複選框的函數。讓我們先添加一個點擊收聽到我們的次區域:
<input type="checkbox" :id="subregion[0].subregion" v-model="subregionCheck" :value="subregion[0].subregion" @click="checkAllCountries(subregion)">
,然後指定方法(只要你不使用ES6,我需要委派「這個」變量):
checkAllCountries: function (subregion) {
var that = this;
if (this.subregionCheck.indexOf(subregion[0].subregion) > -1) {
subregion.forEach(function (element) {
if (that.countryCheck.indexOf(element.name) <= -1) {
that.countryCheck.push(element.name);
}
});
}
else {
subregion.forEach(function (element) {
that.countryCheck.splice(that.countryCheck.indexOf(element.name), 1);
})
}
},
現在我們需要一種方法來取消選中子區域複選框,如果其中一個國家未選中。點擊監聽器添加到國家複選框:
<input type="checkbox" :id="country.name" v-model="countryCheck" :value="country.name" @click="checkSubregion(subregion)">
然後指定方法:
checkSubregion: function (country) {
if ((this.countryCheck.indexOf(country.name) <= -1) && this.subregionCheck.indexOf(country.subregion) > -1) {
this.subregionCheck.splice(this.subregionCheck.indexOf(country.subregion), 1);
}
},
Working fiddle