あなたが最初にすべきことは、あなたのチェックボックスに値と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: []
},
これらの配列としての役割を果たすチェックボックスのマーカー:単一のチェックボックスの値が含まれている場合はチェックされます。最初は両方とも空です。
次の手順では、サブリージョンのチェックボックスのリスナーと、このサブリージョンのすべての国のチェックボックスをチェックする関数を作成する必要があります。 (限り、あなたがES6を使用していないとして、私は「この」変数に委任する必要があります)
<input type="checkbox" :id="subregion[0].subregion" v-model="subregionCheck" :value="subregion[0].subregion" @click="checkAllCountries(subregion)">
をして、方法を指定します:私たちの部分領域に第1のクリックリスナを追加してみましょう
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