Проблема с “деревом” на vue.js

297
19 июля 2017, 21:46

Окей, это не совсем дерево, а просто что-то вроде раскрывающегося списка. Немного застряла - не знаю, как сделать так, чтобы когда я нажимаю на конкретный заголовок "раскрывался" только этот заголовок, а не все заголовки на странице. Уверена, что есть более изящный способ, чем писать к каждому пункту другую переменную, но пока что этот способ не нашла. Очень нужна помощь, спасибо!

< script > 
  import Support from '../components/Support' 
export default { 
  name: 'Help', 
  components: { 
    Support 
  }, 
  data() { 
    return { 
      isActive: true, 
      main_question: 'ОБЩИЕ ВОПРОСЫ', 
      sub_question: 'Как быстро происходит обмен?', 
      answer: 'Большинство обменов на нашем сервисе автоматические. Они происходят в течений 1-й минуты после оплаты заявки. В тех случаях когда обмен происходит в полу-автоматическом режиме (перед обменом Вы увидите предупреждение об этом: скорость выполнения заявки зависит от степени загруженности оператора и обычно составляет 2-20 минут.', 
      show: true, 
      small: true 
    } 
  }, 
  methods: { 
    changeStatus: function() { 
      this.isActive = !this.isActive 
    } 
  } 
} 
 
< 
/script>
.trans_border_m_20 { 
  padding-bottom: 20px; 
} 
 
.answers_bl { 
  margin-top: 35px; 
  .answer_item_title_main { 
    font-family: "SFUIDisplay-Medium", sans-serif; 
    font-size: 16px; 
    color: $greyD3; 
    display: flex; 
    align-items: center; 
    border-top: 1px solid $greyL; 
    padding: 15px 0 12px 0px; 
    cursor: pointer; 
  } 
  .answer_item_title_main.disabled { 
    &:last-child { 
      border-bottom: 1px solid $greyL; 
    } 
  } 
  .answer_item_title_main.active { 
    border-bottom: 1px solid $greyL; 
    .ico_trigger { 
      transform: rotate(180deg); 
      transition: -webkit-transform .2s ease; 
      transition: transform .2s ease; 
      transition: transform .2s ease, -webkit-transform .2s ease; 
    } 
  } 
  .answer_item_main .answer_item:last-child .answer_item_title_minor.active+.answer_item_txt { 
    border-bottom: none; 
  } 
  .ico_trigger { 
    margin-right: 17px; 
    display: inline-block; 
    width: 16px; 
    height: 16px; 
  } 
  .answer_item_title_minor.active+.answer_item_txt { 
    border-bottom: 1px solid $greyL; 
  } 
  .answer_item { 
    padding-left: 70px; 
    .answer_item_title_minor, 
    .trigger_symbol { 
      color: $blueD; 
      font-family: "SFUIDisplay-Medium", sans-serif; 
      font-size: 16px; 
      cursor: pointer; 
    } 
    .answer_item_title_minor { 
      padding: 14px 0 11px 0px; 
      display: block; 
      border-bottom: 1px solid $greyL; 
    } 
    .answer_item { 
      .answer_item_title_minor.disabled { 
        &:last-child { 
          border-bottom: none; 
        } 
      } 
    } 
    .answer_item_title_minor.active { 
      border: none; 
      .trigger_symbol { 
        display: inline-block; 
        vertical-align: middle; 
        border: none; 
        transform: rotate(90deg); 
        transition: -webkit-transform .2s ease; 
        transition: transform .2s ease; 
        transition: transform .2s ease, -webkit-transform .2s ease; 
      } 
    } 
    .trigger_symbol { 
      display: inline-block; 
      margin-left: 8px; 
    } 
    .txt_container { 
      font-family: "SFNS-display-thin", sans-serif; 
      font-size: 14px; 
      color: $greyD3; 
      text-align: justify; 
      padding: 12px 0 25px 0; 
    } 
    .txt_container.active { 
      border-bottom: 1px solid $greyL; 
    } 
  } 
}
<template> 
  <div> 
    <div class="top_bl trans_border trans_border_m_20"> 
      <h1 class="big_title">Помощь по работе с сервисом</h1> 
    </div> 
    <div class="answers_bl main_center_bl "> 
      <div class="answer_item_main"> 
        <div @click="show = !show" class="answer_item_title_main" v-on:click="changeStatus" v-bind:class="{ active: isActive }"><span class="ico_trigger"></span>{{main_question}}</div> 
        <div v-if="show" class="answer_item"> 
          <div @click="small = !small" class="answer_item_title_minor" v-on:click="changeStatus" v-bind:class="{ active: isActive }">{{sub_question}}<span class="trigger_symbol">></span></div> 
          <div v-if="small" class="answer_item_txt"> 
            <p class="txt_container">{{answer}}</p> 
          </div> 
        </div> 
        <div v-if="show" class="answer_item"> 
          <div @click="small = !small" class="answer_item_title_minor" v-on:click="changeStatus" v-bind:class="{ active: isActive }">{{sub_question}}<span class="trigger_symbol">></span></div> 
          <div v-if="small" class="answer_item_txt"> 
            <p class="txt_container">{{answer}}</p> 
          </div> 
        </div> 
        <div v-if="show"  class="answer_item"> 
          <div  @click="small = !small" class="answer_item_title_minor" v-on:click="changeStatus" v-bind:class="{ active: isActive }">{{sub_question}}<span class="trigger_symbol">></span></div> 
          <div v-if="small" class="answer_item_txt"> 
            <p class="txt_container">{{answer}}</p> 
          </div> 
        </div> 
      </div> 
 
      <div class="answer_item_main"> 
        <div @click="show = !show" class="answer_item_title_main" v-on:click="changeStatus" v-bind:class="{ active: isActive }"><span class="ico_trigger"></span>{{main_question}}</div> 
        <div v-if="show" class="answer_item"> 
          <div @click="small = !small" class="answer_item_title_minor" v-on:click="changeStatus" v-bind:class="{ active: isActive }">{{sub_question}}<span class="trigger_symbol">></span></div> 
          <div v-if="small" class="answer_item_txt"> 
            <p class="txt_container">{{answer}}</p> 
          </div> 
        </div> 
      </div> 
    </div> 
  </div> 
</template>

Answer 1

Я бы все "answer_item" выводил v-for что бы не писать такое количество v-on:click и прочего в обработке каждого элемента, легче написать 1 раз и прогнать циклом , создать отдельный массив обьектов , а там легче было бы их раскрывать из-за (item,index) , дать каждому из внутренних обьектов flag "show", и менять его с помощью того же index в v-for .

READ ALSO
Как создать бесконечный фоновый цикл в Win Form?

Как создать бесконечный фоновый цикл в Win Form?

Вот построенная программа Win Form (C#)

214
Подключиться к My SQL через Entity

Подключиться к My SQL через Entity

Есть консольное приложение C# которое нужно подключить к объектам на локальной БД, MysqlВ App

276
C# Excel создание выпадающего списка в ячейке

C# Excel создание выпадающего списка в ячейке

Вывожу в Excel данные в C# WinFormsВ одной ячейке мне нужно, чтобы был выпадающий список с вариантами (при этом одно из значений было бы выбрано)

254