Angular 12 Bootstrap 5 ngFor Accordion 不关闭

标签 angular bootstrap-5 bootstrap-accordion

我正在尝试使用 bootstrap 5 在 Angular 12 中创建一个 ngFor 下拉 Accordion 列表。不知何故, Accordion 保持打开状态并且无法关闭。

我希望有人知道如何使 Accordion 能够关闭。

https://getbootstrap.com/docs/5.0/components/accordion/

    <div class="accordion">
        <div class="accordion-item" *ngFor="let category of cateories; let i = index">
            <h2 class="accordion-header" [attr.id]="'heading' + i">
                <button class="accordion-button" type="button" data-bs-toggle="collapse"
                    [attr.data-target]="'#collapse' + i" aria-expanded="true" [attr.aria-controls]="'collapse' + i">
                    {{ category.title }}
                </button>
            </h2>
            <div [attr.id]="'collapse' + i" class="accordion-collapse collapse show" [attr.aria-labelledby]="'heading' + i"
                data-bs-parent="#accordionExample">
                <div class="accordion-body">
                    <ul>
                        <li *ngFor="let childCategory of category.children">{{ childCategory.title }}</li>
                    </ul>
                </div>
            </div>
        </div>
    </div>

enter image description here

最佳答案

Somehow the accordions stay open and can not be closed.

这是因为您没有定义任何方法来使其关闭。您可能需要配置 JQuery 和引导脚本文件...不推荐。

我建议您考虑使用此类组件的库,例如 ngx-accordion

另一种解决方案是简单地对关闭和打开 Accordion 的逻辑进行硬编码

您可以设置一个属性来跟踪 Accordion 是否打开。在你的 TS 文件中

openAccordion: boolean[] = []

在你的html中

<div class="accordion">
  <div class="accordion-item" *ngFor="let category of cateories; let i = index">
    <h2 class="accordion-header" [attr.id]="'heading' + i">
      <button class="accordion-button" type="button"
            (click)='openAccordion[i] = !openAccordion[i]' data-bs-toggle="collapse"
                [attr.data-target]="'#collapse' + i" aria-expanded="true" [attr.aria-controls]="'collapse' + i">
                {{ category.title }}
            </button>
    </h2>
    <div [attr.id]="'collapse' + i" class="accordion-collapse collapse" [class.show]='openAccordion[i]'
      [attr.aria-labelledby]="'heading' + i" data-bs-parent="#accordionExample">
      <div class="accordion-body">
        <ul>
          <li *ngFor="let childCategory of category.children">{{ childCategory.title }}</li>
        </ul>
      </div>
    </div>
  </div>
</div>

Sample Demo Here

另一个选项是包含 bootstrap js 文件。下面是如何实现的演示

<div class="accordion" id="accordionContainer">
  <div class="accordion-item" *ngFor="let category of cateories; let i = index">
    <h2 class="accordion-header" [id]="'heading' + i">
      <button class="accordion-button" type="button" data-bs-toggle="collapse" [attr.data-bs-target]="'#collapse' + i" aria-expanded="true" [attr.aria-controls]="'collapse' + i">
       {{ category.title }}
      </button>
    </h2>
    <div [id]="'collapse' + i" class="accordion-collapse collapse show" [attr.aria-labelledby]="'heading' + i"
      data-bs-parent="#accordionContainer">
      <div class="accordion-body">
        <ul>
          <li *ngFor="let childCategory of category.children">{{ childCategory.title }}</li>
        </ul>
      </div>
    </div>
  </div>
</div>

See Demo

关于Angular 12 Bootstrap 5 ngFor Accordion 不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67532111/

相关文章:

sass - 如何在 Bootstrap 5 中访问主题颜色?

html - Bootstrap Multiple Items Carousel(一次显示多个轮播元素)

bootstrap-4 - Bootstrap 4 折叠 Accordion - 始终打开一个面板

angular - Ionic 3 同时进行深度链接和延迟加载

javascript - Angular 2 中的异步等待

css - 在 Twitter Bootstrap 中更改导航栏颜色

html - 引导 Accordion 数据切换不适用于移动设备

css - Bootstrap Accordion 水平折叠

html - 在绝对 div 中居中绝对 div

javascript - Angular Highcharts - 单击后图表引用消失