Этот ответ намного лучше и более производительный
i
- индекс цикла.
prevAccordionIndex
определен в данных экземпляра Vue и изначально имеет значение null.Он используется для хранения индекса предыдущего (последнего) открытого аккордеона, поэтому нет необходимости перебирать $refs
, чтобы найти открытый аккордеон, как в предыдущем ответе.
Все аккордеоны изначально свернуты (закрыты).
methods: {
handleAccordionShow(index) {
if (this.prevAccordionIndex !== null) {
this.$uikit.accordion(this.$refs.categoryAccordion[this.prevAccordionIndex]).toggle(0, false)
this.prevAccordionIndex = index
} else {
this.prevAccordionIndex = index
}
},
handleAccordionHide(index) {
this.prevAccordionIndex = this.prevAccordionIndex === index ? null : index
}
}
<ul ref="categoryAccordion" @beforeshow="handleAccordionShow(i)" @beforehide="handleAccordionHide(i)" uk-accordion>
<li>...</li>
</ul>