La première chose que vous devez faire est de lier les valeurs et v-modèles à vos cases à cocher:
<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">
Et ajouter des tableaux de subregionCheck et countryCheck dans vos données:
data: {
subregions: null,
countries: null,
query: '',
countryList: [],
subregionCheck:[],
countryCheck: []
},
Ces tableaux servent un marqueur pour nos cases à cocher: si elles contiennent la valeur d'une seule case à cocher, elles seront vérifiées. Au début, les deux sont vides. À l'étape suivante, nous devrions créer une case à cocher listener for subregion et une case permettant de cocher tous les pays pour cette sous-région. Ajoutons un écouteur de clic d'abord à notre sous-région:
<input type="checkbox" :id="subregion[0].subregion" v-model="subregionCheck" :value="subregion[0].subregion" @click="checkAllCountries(subregion)">
puis spécifiez la méthode (pour autant que vous ne l'utilisez ES6, je dois déléguer « cette » à la variable):
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);
})
}
},
Maintenant, nous avons besoin d'une méthode pour décocher la case sous-région si l'un de ses pays n'est pas coché. Ajouter l'auditeur de clic pour les pays des cases à cocher:
<input type="checkbox" :id="country.name" v-model="countryCheck" :value="country.name" @click="checkSubregion(subregion)">
puis spécifiez la méthode:
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