Я пытаюсь сделать элемент секций с помощью Vue.js, который будет разворачиваться или сворачиваться по нажатию на иконку пользователем. Сделал отслеживание состояния с помощью параметра isActive, но столкнулся с тем, что для каждого такого элемента мне нужно отслеживать состояние отдельно, и мой подход с общим параметром компонента не подходит - если нажимаю свернуть/развернуть одну то реагируют все секции.
Бэк с api для управления секциями подвязан, записи берутся из БД.
Код компонента<template>
<div class="container">
<div class="sections">
<div class="section" v-for="section in sections">
<div class="d-flex p-3 bg-danger text-white">
<span >
{{section.title}}
<span v-if="isActive!==true">
<span class="section-drop" v-on:click="activate">
<v-icon name="angle-down" scale="2"></v-icon>
</span>
</span >
<span v-else="isActive==true">
<span class="section-drop" v-on:click="deactivate">
<v-icon name="angle-up" scale="2"></v-icon>
</span>
</span >
</span>
</div>
</div>
</div>
</div>
</template>
<script>
import api from '../api';
export default {
name: 'Sections',
data() {
return {
newSection: '',
sections: [],
}
},
props: {
isActive: Boolean
},
methods: {
activate: function () {
this.isActive = true;
console.log(this.isActive);
},
deactivate: function () {
this.isActive = false;
console.log(this.isActive);
},
createSection: function () {
let section = this.newSection;
if(!section) {
return
}
api.createSection(section)
this.sections.push({
title: section
});
},
deleteSection: function (id) {
api.deleteSection(id)
}
},
mounted() {
api.getSections().then(response => {
this.$log.debug("Data loaded: ", response.data)
this.sections = response.data
}).catch(error => {
this.$log.debug(error)
})
}
}
</script>
<style>
.section-drop {
position: fixed;
left: 80%;
}
.section-drop :hover {
cursor: pointer;
}
.section {
margin-top: 10px;
}
.sections {
margin-top: 15%;
}
</style>
Прошу помочь - пояснить, как можно это сделать, отслеживать состояние каждой секции отдельно?