仅切换手风琴点击 vue.js

2024-01-11

我正在构建一个简单的 vue 手风琴,当我单击一个手风琴时,它们都会打开,这不是我追求的行为。有没有办法只打开点击的那个?我以为“这个”会解决这个问题,但我没有运气。

html:

<div id="accordion" class="accordion-container">
            <div class="accordion" :class="accordionClasses">
              <div class="accordion-header" @click="toggleAccordion">
                Accordion 1
                <i class="fal fa-plus" />
                <!--  <i class="fal fa-minus" /> -->
              </div>
              <div class="accordion-body">
                <div class="accordion-content">Lorem ipsum dolor sit amet, consectetur adipiscing elit. <strong>Pellentesque risus mi</strong></div>
              </div>
            </div>
            <div class="accordion" :class="accordionClasses">
              <div class="accordion-header" @click="toggleAccordion">
                Accordion 2
                <i class="fal fa-plus" />
                <!--   <i class="fal fa-minus" /> -->
              </div>
              <div class="accordion-body">
                <div class="accordion-content">Lorem ipsum dolor sit amet, consectetur adipiscing elit. <strong>Pellentesque risus mi</strong></div>
              </div>
            </div>
            <div class="accordion" :class="accordionClasses">
              <div class="accordion-header" @click="toggleAccordion">
                Accordion 3
                <i class="fal fa-plus" />
                <!-- <i class="fal fa-minus" />-->
              </div>
              <div class="accordion-body">
                <div class="accordion-content">Lorem ipsum dolor sit amet, consectetur adipiscing elit. <strong>Pellentesque risus mi</strong></div>
              </div>
            </div>
          </div>

js:

export default {
  name: 'trial-page',
  data() {
  return {
  isOpen: false
};
  },
  computed: {
accordionClasses: function() {
  return {
    'is-closed': !this.isOpen
  };
 }
},
   methods: {
toggleAccordion: function() {
  this.isOpen = !this.isOpen;
 }
}
};

如果您想跟踪哪个手风琴部分打开或关闭,您不需要为每个部分提供一个索引并将其用作跟踪工具。当您创建列表时,我强烈建议您使用v-for.

总的来说,您的代码可以进行一些重构,因此我重写了一些代码,以便为您提供一个示例,说明您应该实现的目标:

<template>
  <div id="accordion" class="accordion-container">
    <div
      v-for="(item, index) in items"
      :key="index"
      :class="[
        'accordion',
        { 'is-open': isOpen.includes(index) }
      ]"
    >
      <div class="accordion-header" @click="toggleAccordion(index)">
        {{ item.title }}
        <i v-if="!isOpen.includes(index)" class="fal fa-plus"/>
        <i v-else class="fal fa-minus"/>
      </div>
      <div class="accordion-body">
        <div class="accordion-content">
          {{ item.text }}
          <strong>{{ item.sub }}</strong>
        </div>
      </div>
    </div>
  </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"
        }
      ],
      isOpen: []
    };
  },
  methods: {
    toggleAccordion(index) {
      if (this.isOpen.includes(index)) {
        this.isOpen = this.isOpen.filter(i => i !== index);
        return;
      }

      this.isOpen.push(index);
    }
  }
};
</script>

<style>
.accordion:not(.is-open) .accordion-body {
  display: none;
}
</style>

这里有一个codepen测试一下:https://codesandbox.io/s/blazing-water-icpxw https://codesandbox.io/s/blazing-water-icpxw

您可能需要调整某些内容以满足您的需求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅切换手风琴点击 vue.js 的相关文章

随机推荐

  • Spark 结构化流式传输多个 WriteStream 到同一接收器

    Two Writestream在 Spark Structured Streaming 2 2 1 中 到同一个数据库接收器的操作不会按顺序发生 请建议如何使它们按顺序执行 val deleteSink ds1 writestream ou
  • jquery跨域认证

    我将 Jetty 服务器配置为允许跨域 http 请求 allowedOrigins 并允许使用其 CrossOriginFilter 进行跨域身份验证 allowCredentials true 无需身份验证的跨域 http 请求可以正常
  • SQL - 插入一行并返回主键

    我已在存在主键的表中插入了包含一些数据的行 如何 SELECT 刚刚插入的行的主键 我应该更具体地提到我目前 使用 SQLite 对于 MS SQL Server SCOPE IDENTITY http msdn microsoft com
  • 如何在React typescript中读取xml文件(toolsbox.xml)

    我无法在 tsx 文件中导入 xml 文件 但在 jsx 文件中我可以访问该 xml 文件 您需要为打字稿定义一个模块来评估 否则它将尝试寻找类似的东西toolbox xml ts 名为 XML d ts 的文件中的一些内容 为此放置在 s
  • Vue 警告:未知的自定义元素: - 您是否正确注册了组件?

    我是一名新生 当我使用自定义组件时 它给了我这个错误 Vue warn Unknown custom element 您是否正确注册了组件 The ModalBase组件中使用的组件NoticeModal vue and NoticeMod
  • 实体框架支持的数据库

    我将制作一个最终用户桌面应用程序 因此我需要一个相对较小的数据库 例如 Firebird 或 SqlLite Entity Framework 4 是否支持 SQL Server 以外的其他数据库 ADO NET 数据提供程序 http m
  • ReactJS:我可以创建自己的 SyntheticEvent 吗?

    我正在使用 ReactJS 它是 SyntheticEvent 来跟踪事件及其目标 DOM 节点 我正在创建一些可变组件 我希望它们触发 SyntheticEvent 来跟踪 DOM 并使用以下命令跟踪更改的值e target and e
  • 使用 jQuery 插入 HTML

    如果我有一个 HTML 块 例如 div div div div
  • 将 .msi 转换为 .exe 的最佳工具包是什么?

    我想将 msi 封装到 exe 中以便添加 硬编码文件夹位置 例如 C Program Files x86 TEST 添加安装版本文件 使用静默安装 使用命令行开关 安装 卸载 日志生成 添加 Windows 注册表足迹 微星定制 用于安装
  • 使用 Web 视图下载文件

    在一个项目中 我想在 Web 视图中加载的 http 页面中下载 mp3 文件 下载的文件可以通过手机驱动器或保管箱等应用程序打开 当用户单击 Web 视图中的链接时 它应该将其下载到 iPhone 在服务器端 mp3 文件位于 webro
  • linux getlogin() 内存泄漏

    我有以下代码 由于某种原因 valgrind 在 getlogin 函数中发现了一些内存泄漏 代码 include
  • MySQL临时表与存储过程中的内存表

    在存储过程中使用哪个更好 临时表还是内存表 该表用于存储报告的摘要数据 开发人员应该注意哪些权衡 CREATE TEMPORARY TABLE t avg double or CREATE TABLE t avg double ENGINE
  • 实体框架:已经有一个与此命令关联的打开的 DataReader,必须先将其关闭

    这个问题与this https stackoverflow com questions 7917261 how to load the related entities using entity framework and the repo
  • CKEditor:子菜单(下拉列表)未出现

    我需要插件的下拉菜单列表中的下拉子菜单列表 但问题是 该菜单显示它有下拉子菜单列表 但列表内容尚未加载 显示空子菜单 快照 code CKEDITOR plugins add microdata requires styles button
  • 开发 H264 硬件解码器 Android - Stagefright 还是 OpenMax IL?

    我正在为 Android 开发 H264 H W 加速视频解码器 到目前为止 我已经接触过一些图书馆MediaCodec Stagefright OpenMax IL OpenMax AL and FFmpeg 经过一番研究 我发现 我找到
  • 解决 Java7 中 FileWalking 树中拒绝访问的问题

    下面是一些简单的代码 只是为了测试Files walkFileTree 方法 然而 该文件夹 etc ssl private 它具有这些权限 rwx x 抛出异常 即使我认为我用 if 语句来保护它 if permissions equal
  • 长 .when().then().when().then().otherwise() 链的替代方案

    是否有一些聪明的替代方法可以编写长的when then otherwise 链而不对值进行硬编码 请参见下面的示例 假设我们有以下数据框 df pl DataFrame Market AT AT DE DE CA DE UK US Numb
  • iPhone异步文件加载?

    有没有办法异步加载iPhone中的本地文件 我使用以下方法为我的 uitableview 加载 uiimages NSData imageData NSData alloc initWithContentsOfFile fileName U
  • 通过轻量级迁移更改核心数据实体名称?

    有没有办法在 iOS 上使用 自动轻量级迁移 的同时更改核心数据实体名称的名称 在目标模型中 将重命名标识符设置为源模型中实体的名称 在 Xcode 3 中 重命名标识符位于详细信息窗格的用户信息窗格中 版本哈希修饰符下方 在 Xcode
  • 仅切换手风琴点击 vue.js

    我正在构建一个简单的 vue 手风琴 当我单击一个手风琴时 它们都会打开 这不是我追求的行为 有没有办法只打开点击的那个 我以为 这个 会解决这个问题 但我没有运气 html div class accordion container di