Der erste, was Sie tun sollen, ist es, Werte zu binden und v-Modelle auf Ihre Kontrollkästchen:
<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">
Und füge Arrays von subregionCheck und countryCheck in Ihren Daten:
data: {
subregions: null,
countries: null,
query: '',
countryList: [],
subregionCheck:[],
countryCheck: []
},
Diese Arrays dienen als Marker für unsere Checkboxen: Wenn sie den Wert eines einzelnen Kontrollkästchens enthalten, wird dies überprüft. Am Anfang sind beide leer.
Im nächsten Schritt sollten wir ein Listener für Subregion-Checkbox und eine Funktion zur Überprüfung aller Länder-Checkboxen für diese Subregion anlegen. Lassen Sie uns einen Klick Zuhörer hinzufügen zuerst in unseren Subregion:
<input type="checkbox" :id="subregion[0].subregion" v-model="subregionCheck" :value="subregion[0].subregion" @click="checkAllCountries(subregion)">
und dann die Methode angeben (sofern Sie nicht ES6 mit, ich brauche „dieses“ Variable zu delegieren):
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);
})
}
},
Jetzt brauchen wir eine Methode, um das Kontrollkästchen Subregion zu deaktivieren, wenn eines der Länder nicht markiert ist. Fügen Sie den Klick-Listener Länder Kontrollkästchen:
<input type="checkbox" :id="country.name" v-model="countryCheck" :value="country.name" @click="checkSubregion(subregion)">
und geben Sie dann das Verfahren:
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