Если у вас нет особых предпочтений c для состояний checked
, я бы рекомендовал использовать список логических значений и переключать их соответствующие состояния (с помощью Vue.set
для преодоления предупреждение об обнаружении изменения массива ).
В приведенном ниже примере используется вычисляемый установщик / получатель , чтобы реактивно определить, установлены ли все флажки, и переключать их сразу, когда установщик получает Позвонил.
Кстати, я добавил дополнительный атрибут (indeterminate
), который может оказаться полезным.
Я использую .prop
модификатор на флажке "allChecked", чтобы сообщить Vue, что мы хотим связать это indeterminate
как свойство DOM вместо атрибута компонента.
new Vue({
el: '#app',
data() {
return {
checkList: [false, false, false, false]
}
},
computed: {
allChecked: {
get() {
return this.checkList.every(Boolean);
},
set(isChecked) {
for (let index = 0; index < this.checkList.length; index++) {
this.$set(this.checkList, index, isChecked);
}
}
},
indeterminate() {
return !this.allChecked && this.checkList.some(Boolean);
}
}
})
#app > input[type="checkbox"] {
display: block;
}
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
<div id="app">
<label>
<input
v-model="allChecked"
:indeterminate.prop="indeterminate"
class="toggleAll"
type="checkbox" />
Check all
</label>
<input
v-model="checkList[index]"
v-for="(checked, index) of checkList" :key="index"
class="radio"
type="checkbox" />
</div>