Как скрыть элемент из списка при двойном нажатии без переключения в приложении vue nuxt

#javascript #vuejs2 #nuxt.js

Вопрос:

У меня есть кликабельный список в приложении Vue/Nuxt. Когда выбран один элемент, появляется маленькая галочка. Я хотел бы иметь возможность отменить выбор элемента (галочка исчезнет), если элемент будет нажат снова. Если я нажму на другой элемент, я хотел бы, чтобы этот элемент был выбран, а ранее выбранный элемент был снят (можно выбрать только один элемент). До сих пор, если я попытаюсь выбрать другой элемент, мне нужно нажать дважды, потому что при первом щелчке будет снят выбор только первого выбранного элемента, а при втором щелчке будет выбран новый элемент. Есть идеи ??

 <template>
  <div
    v-for="(item, itemIndex) in list"
            :key="itemIndex"
            @click="onClick(itemIndex)"
  >
    <div>
      <div v-if="activeIndex == itemIndex amp;amp; selected === true">
        <TickMark />
      </div>
      <Item />
    </div>
  </div>
</template>

<script>

export default {
    props: {
        questionModules: {
            required: true,
            type: Array,
        },
    },
    data() {
        return {
            activeIndex: null,
            selected: false,
        }
    },
    methods: {
        onClick (index) {
            this.activeIndex = index
            this.selected = !this.selected
        },
    },
}
</script>

 

Ответ №1:

поскольку вам не нужно менять позиции или сортировать список — сохранение выбранного индекса просто отлично, сделайте это так:

 <template>
  <section
    class="items-list">
    <template v-for="(item, itemIndex) in list"
            :key="itemIndex" >

      <TickMark v-if="activeIndex === itemIndex 
       @click="selectItem(itemIndex)"  /> // by clicking on the mark - it will toggle the selection


      <Item />

    </template>
  </section>

</template>

<script>

export default {
    props: {
        questionModules: {
            required: true,
            type: Array,
        },
    },
    data() {
        return {
            activeIndex: null
        }
    },
    methods: {
        selectItem (index) {
            this.activeIndex = index
        },
    },
}
</script>
 

Я изменил архитектуру DOM, чтобы в нем не было всех ненужных элементов