Задать вопрос
@FreeArcher
Senior 1С; php, JS Starter

Как закрыть все компоненты (папки) при клике на любую из них или на вложенный элемент?

Приложение выглядит как список папок, внутри которых есть элементы. Кликая на папку, открывается список элементов.
И папка, и элементы это у меня отдельные компоненты.

И получается, что когда кликаешь на любой элемент или папку, другие папки об этом не знают. И получается ситуация, что открыто несколько папок и пока их все не прощелкаешь, они не закроются. Неудобно.

Но как сообщить всем компонентам папок, что был клик и пора их закрыть, я не могу придумать.

Немного кода для понимания:
//Контейнер который содержит папки
    <div v-for="currentBk of bkFolder"
        :key="currentBk.id"
        >
        <BkFolder v-if="currentBk.children"
          :bkChildren = currentBk.children
          :title = currentBk.title 
          :index = currentBk.index 
        >
        </BkFolder>

        <BkItem v-else
          :currentBk = currentBk
        >
        </BkItem> 
    </div>
//*************** Вывод папок
<template>
<div>

  <div v-if="index < 4"
    v-on:click="setOpenFolder"
    class="bk-folder">
    {{ title }}
  </div>

  <BkOpenFolder 
    v-if="openFolder"
    v-on:click="setOpenFolder"
    :bkChildren = bkChildren
  />

  </div>
</template>

//********** Раскрытая папка с вложенными элементами
<template>
<div
  v-if="openFolder"
  v-on:click="setCloseFolder"
  >
    <div class="title">
      {{ title }}
    </div>
  <div 
    class="bk-open-folder"
    
  >
    <div v-for="currentBk of bkChildren"
        :key="currentBk.id"
        >
        <BkFolder v-if="currentBk.children"
          :bkFolder = currentBk.children
          :title = currentBk.title 
        >
        </BkFolder>

        <BkItem v-else
          :currentBk = currentBk
        >
        </BkItem> 
    </div>
  </div>
</div>
</template>
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skypro
    React-разработчик с нуля
    9 месяцев
    Далее
  • Skypro
    JavaScript-разработчик с нуля
    9 месяцев
    Далее
  • Skypro
    Frontend-разработчик с нуля
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
kleinmaximus
@kleinmaximus
Senior Full-stack Javascript Developer
Отлавливается любой клик вне компонента и запускается какой-то обработчик.
https://github.com/ndelvalle/v-click-outside
https://github.com/nchutchind/vue-outside-events
Ответ написан
0xD34F
@0xD34F Куратор тега Vue.js
Добавьте компоненту папки свойство, которое будет указывать, кто из дочерних элементов открыт, и пусть от значения этого свойства зависит значение параметра, управляющего открытостью дочерних элементов. Например.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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