为什么当单击一个项目时,所有项目都打开

亚力山大

我有一个带有手风琴的列表,当您单击一个项目时,所有项目都将打开,我只需要打开一个项目,我知道需要循环访问所有项目并将类应用于特定的项目,但是如何为此,请帮助
组件:

  <ul class="accordion accordion__trigger"
      :class="{'accordion__trigger_active': visible}"
      @click="open">
    <li class="accordion__item" v-for="category in MAIN_CATS">
        <nuxt-link exact no-prefetch active-class="link-active"
                   :to="`/category/${category.id}`"
                   class="menu-button">
          {{ category.title }}
        </nuxt-link>
        <div class="accordion__content">
          <div class="menu-sub-list" v-show="visible">
              <ul class="sub-list">
                <li class="menu-item"
                    v-for="sub in SUB_CATS(category.id)"
                    :key="sub.id">
                  <nuxt-link :to="`/category/${sub.id}`" class="menu-button">
                    {{ sub.title }}
                  </nuxt-link>
                </li>
              </ul>
          </div>
        </div>
    </li>
  </ul>

码:

name: "acc",
  data() {
    return {
      index: null,
      Accordion: {
        count: 0,
        active: null
      }
    };
  },
  computed: {
    ...mapGetters([
      'MAIN_CATS',
      'SUB_CATS'
    ]),
    visible() {
      return this.index === this.Accordion.active;
    }
  },
  methods: {
    ...mapActions([
      'GET_CATEGORIES_LIST',
    ]),
    open() {
      if (this.visible) {
        this.Accordion.active = null;
      } else {
        this.Accordion.active = this.index;
      }
    },
    start(el) {
      el.style.height = el.scrollHeight + "px";
    },
    end(el) {
      el.style.height = "";
    }
  },
  created() {
    this.index = this.Accordion.count++;
  },
  mounted() {
    this.GET_CATEGORIES_LIST()
  },

我有一个带有手风琴的列表,当您单击一个项目时,所有项目都将打开,我只需要打开一个项目,我知道需要循环访问所有项目并将类应用于特定的项目,但是如何为此,请帮忙

雅各布·苏普立克

您的代码和所引用答案的代码之间存在多个差异

您会注意到它@click与放在同一行v-for

这样做的主要原因是能够轻松访问index循环中的每个元素。


为了不让您感到复杂,我创建了一个基本的用例场景

<template>
  <div id="accordion" class="accordion-container">
    <ul
      v-for="(category, index) in items"
      :key="index"
      class="accordion accordion__trigger"
      :class="{'accordion__trigger_active': visible===index}"
      @click="visible=index"
    >
      <li class="accordion__item">
        {{ category.title }}
        <div class="accordion__content">
          <div class="menu-sub-list" v-show="visible===index">
            <ul class="sub-list">
              <li class="menu-item">{{ category.sub }}</li>
            </ul>
          </div>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "trial-page",
  data() {
    return {
      items: [
        {
          title: "Accordion 1",
          text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
          sub: "Pellentesque risus mi"
        },
        {
          title: "Accordion 2",
          text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
          sub: "Pellentesque risus mi"
        },
        {
          title: "Accordion 3",
          text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
          sub: "Pellentesque risus mi"
        }
      ],
      visible: null
    };
  }
};
</script>

<style>
.accordion__trigger_active {
  background-color: blue;
  color: white;
}
</style>

您可以看到,在这种情况下,想法是使用index分配给visibledata属性的进行操作

我们仅检查值是否visible等于当前按下的项目index

这样,我们就可以有条件地v-show触发并触发类:class="{'accordion__trigger_active': visible===index}"


请注意,如果v-for同一组件中有更多循环,则需要确保用于的值visible始终是唯一的,为此,您可以简单地向其中添加一些字符串,例如:

@click="visible=index+'category'"


还记得:key使用时分配一个v-for

例: v-for="(category, index) in items" :key="index"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击时如何对一个框中的选定项目中的所有数据求和?

来自分类Dev

单击时-给除当前项目以外的所有其他li项目提供一个类-网格

来自分类Dev

ExpandableListview-单击另一个项目时,如何关闭上一个打开的项目?

来自分类Dev

为什么仅单击一个链接时所有链接都会更改颜色?

来自分类Dev

为什么没有一个包含所有项目的数组,而是每个项目都有一个数组?

来自分类Dev

为什么所有项目都重复相同的ID

来自分类Dev

为什么当我只点击一个链接时,所有链接都显示为已访问?

来自分类Dev

打开ListView并单击上一个ListView的项目时的最佳实践

来自分类Dev

在golang范围复制之后,所有项目都指向src切片的最后一个项目

来自分类Dev

一个班级中所有可定义的项目是否都包含一个包含性术语?

来自分类Dev

单击上一个抽屉项目的特定片段时如何打开下一个抽屉

来自分类Dev

为什么一个新的.NET5项目中的所有分析器都被抑制?

来自分类Dev

为什么所有CSS文件都放在一个文件夹中?

来自分类Dev

为什么在reduceByKey之后所有数据最终都集中在一个分区中?

来自分类Dev

在发射一个对象时,对象的所有项目都被推入所有数组

来自分类Dev

为什么当只单击一个下拉按钮时,所有其他下拉按钮都会删除其菜单?

来自分类Dev

单击按钮淡出所有内容,然后淡入一个项目

来自分类Dev

单击另一个li项目时隐藏一个li项目

来自分类Dev

我想显示数据库中的所有项目标题,但它只显示一个项目。为什么?

来自分类Dev

当我在devDependencies中有一个项目时,为什么npm不安装依赖项?

来自分类Dev

当从选择框中选择一个项目时,为什么没有调用组件类中的方法?

来自分类Dev

我想从组合框中选择一个项目,并在单击按钮时根据所选项目打开另一个框架

来自分类Dev

为什么在 asyncio.wait() 中我明确表示只希望完成第一个任务时所有任务都完成了?

来自分类Dev

当我尝试使用OpenProjectAsync打开项目时,为什么msbuild会给我一个“不支持语言” C#”的错误

来自分类Dev

为什么在创建项目范围的常量时需要一个实现文件(.m)?

来自分类Dev

悬停一个项目时为什么不能更改下拉菜单的颜色?

来自分类Dev

为什么在使用AJAX + Ruby时,我的代码为什么删除了一个项目却没有淡出或隐藏?

来自分类Dev

添加多个项目时,为什么仅将最后一个项目插入数据库?

来自分类Dev

为什么单击一个按钮会影响jQuery Ajax中的所有按钮

Related 相关文章

  1. 1

    单击时如何对一个框中的选定项目中的所有数据求和?

  2. 2

    单击时-给除当前项目以外的所有其他li项目提供一个类-网格

  3. 3

    ExpandableListview-单击另一个项目时,如何关闭上一个打开的项目?

  4. 4

    为什么仅单击一个链接时所有链接都会更改颜色?

  5. 5

    为什么没有一个包含所有项目的数组,而是每个项目都有一个数组?

  6. 6

    为什么所有项目都重复相同的ID

  7. 7

    为什么当我只点击一个链接时,所有链接都显示为已访问?

  8. 8

    打开ListView并单击上一个ListView的项目时的最佳实践

  9. 9

    在golang范围复制之后,所有项目都指向src切片的最后一个项目

  10. 10

    一个班级中所有可定义的项目是否都包含一个包含性术语?

  11. 11

    单击上一个抽屉项目的特定片段时如何打开下一个抽屉

  12. 12

    为什么一个新的.NET5项目中的所有分析器都被抑制?

  13. 13

    为什么所有CSS文件都放在一个文件夹中?

  14. 14

    为什么在reduceByKey之后所有数据最终都集中在一个分区中?

  15. 15

    在发射一个对象时,对象的所有项目都被推入所有数组

  16. 16

    为什么当只单击一个下拉按钮时,所有其他下拉按钮都会删除其菜单?

  17. 17

    单击按钮淡出所有内容,然后淡入一个项目

  18. 18

    单击另一个li项目时隐藏一个li项目

  19. 19

    我想显示数据库中的所有项目标题,但它只显示一个项目。为什么?

  20. 20

    当我在devDependencies中有一个项目时,为什么npm不安装依赖项?

  21. 21

    当从选择框中选择一个项目时,为什么没有调用组件类中的方法?

  22. 22

    我想从组合框中选择一个项目,并在单击按钮时根据所选项目打开另一个框架

  23. 23

    为什么在 asyncio.wait() 中我明确表示只希望完成第一个任务时所有任务都完成了?

  24. 24

    当我尝试使用OpenProjectAsync打开项目时,为什么msbuild会给我一个“不支持语言” C#”的错误

  25. 25

    为什么在创建项目范围的常量时需要一个实现文件(.m)?

  26. 26

    悬停一个项目时为什么不能更改下拉菜单的颜色?

  27. 27

    为什么在使用AJAX + Ruby时,我的代码为什么删除了一个项目却没有淡出或隐藏?

  28. 28

    添加多个项目时,为什么仅将最后一个项目插入数据库?

  29. 29

    为什么单击一个按钮会影响jQuery Ajax中的所有按钮

热门标签

归档