Как вы переключаете класс в vue.js для отображаемых элементов списка? Этот вопрос является продолжением вопроса это с хорошим ответом. Я хочу иметь возможность переключать каждый элемент по отдельности, а также переключать их все. я пытался решение с приведенным ниже кодом, но оно кажется хрупким и, похоже, не работает.
Другим решением было бы использовать одну переменную для переключения всех элементов, а затем каждый элемент имеет локальную переменную, которую можно включать и выключать, но не знаю, как это реализовать.
// html element
<button v-on:click = "toggleAll"></button>
<div v-for = "(item, i) in dynamicItems" :key=i
v-bind:class = "{ active: showItem }"
v-on:click = "showItem[i] = !showItem[i]">
</div>
//in vue.js app
//dynamicItems and showItem will be populated based on API response
data: {
dynamicItems: [],
showItem: boolean[] = [],
showAll: boolean = false;
},
methods: {
toggleAll(){
this.showAll = !this.showAll;
this.showItem.forEach(item => item = this.showAll);
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, все, что вам нужно сделать, это
v-bind:class = "{ active: showItem || showAll }"
и удалите последнюю строку из toggleAll
Вам также необходимо использовать Vue.set при обновлении значений массива, поскольку элементы массива не являются реактивными.
Вот небольшой пример того, как вы хотите. Это просто альтернатива, а не точная копия вашего кода.
var app = new Vue({
el:'#app',
data: {
dynamicItems: [
{id:1,name:'Niklesh',selected:false},
{id:2,name:'Raut',selected:false}
],
selectedAll:false,
},
methods: {
toggleAll(){
for(let i in this.dynamicItems){
this.dynamicItems[i].selected = this.selectedAll;
}
}
}
});.active{
color:blue;
font-size:20px;
}<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.9/vue.js"></script>
<div id = "app">
<template>
<input type = "checkbox" v-model = "selectedAll" @change = "toggleAll"> Toggle All
<div v-for = "(item, i) in dynamicItems">
<div :class='{active:item.selected}'><input type = "checkbox" v-model = "item.selected">Id : {{item.id}}, Name: {{item.name}}</div>
</div>
{{dynamicItems}}
</template>
</div>
Вы можете просто обернуть свой элемент
v-forв другой div и иметь привязку класса для переключения всего этого, тогда он скроет все, а не привяжет его кv-for