Вы хотите отделить свой аккордеонный элемент от l oop. Таким образом, вы можете иметь изолированные состояния в каждом компоненте.
<div>
<accordion-item
v-for="(alert, index) in alerts"
:alert="alert"
:key="index">
</accordion-item>
</div>
внутри вашего <accordion-item/>
у вас должно быть collapsed
внутри вашего data
Другой способ - сохранить переключаемые элементы в массиве.
export default {
data: () => ({
toggled: []
}),
methods: {
isActive (item) {
return this.toggled.indexOf(item) >= 0
},
toggleItem (item) {
const index = this.toggled.indexOf(item)
if (index >= 0) {
this.toggled.splice(index, 1)
return
}
this.toggled.push(item)
}
}
}
Итак, вы можете использовать его сейчас следующим образом:
<a
role="button"
data-toggle="collapse"
data-parent="#accordion"
v-bind:href="'#collapse'+index"
aria-expanded="true"
v-on:click="toggleItem(index)">
<i
:class="[isActive(index) ? 'fa-minus' : 'fa-plus']"
class="more-less fa"></i>
<h4 class="panel-title">@{{ alert.description }}</h4>
</a>
кстати, вы зацикливаете id=collapseExpand
, что вызовет у вас проблемы. вместо этого попробуйте :id="'collapseExpand' + index"