@MarkusEfr

Как управлять параметром для отдельного элемента DOM из Vue.js компонента?

Я пытаюсь сделать элемент секций с помощью Vue.js, который будет разворачиваться или сворачиваться по нажатию на иконку пользователем. Сделал отслеживание состояния с помощью параметра isActive, но столкнулся с тем, что для каждого такого элемента мне нужно отслеживать состояние отдельно, и мой подход с общим параметром компонента не подходит - если нажимаю свернуть/развернуть одну то реагируют все секции.
Как это выглядит

5dac7d46c07bb454263077.png

Бэк с 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>

Прошу помочь - пояснить, как можно это сделать, отслеживать состояние каждой секции отдельно?
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Сделайте отдельный компонент для этих секций, со свойством isActive - у каждого экземпляра оно будет собственное. Или этих isActive'ов у вас должен быть массив, длина которого равна количеству секций. Или добавьте свойство isActive элементам sections - каждому.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы