NgBootstrap手风琴组件

时间:2018-06-15 10:40:34

标签: ng-bootstrap

如何拥有多个面板>多个手风琴/多个面板>用一个按钮点击关闭单个手风琴?

尝试使用" closeOthers"在api中提到但是不起作用

1 个答案:

答案 0 :(得分:1)

在你的html文件中

<ngb-accordion #acc="ngbAccordion" (panelChange)="beforeChange($event)">
  <ngb-panel title="Title 1" id="id1">
    <ng-template ngbPanelContent>
      Panel 1
    </ng-template>
  </ngb-panel>
  <ngb-panel title="Title 2" id="id2">
    <ng-template ngbPanelContent>
      Panel 2
    </ng-template>
  </ngb-panel>
  <ngb-panel title="Title 3" id="id3">
    <ng-template ngbPanelContent>
      Panel 3
    </ng-template>
  </ngb-panel>
</ngb-accordion>

<button (click)="closeAll(acc)">Close all</button>

在你的ts文件中

  panels = [
    { id: 'id1', state: true },
    { id: 'id2', state: true },
    { id: 'id3', state: true }
  ];

  public beforeChange($event: NgbPanelChangeEvent) {
    for (let panel of this.panels) 
      if (panel.id === $event.panelId)
        panel.state = !panel.state;
  }

  closeAll(acc) {
    for (let panel of this.panels) 
      if (!panel.state)
        acc.toggle(panel.id);
  }

您使用面板ID和状态来保存一组对象。当您与其中一个面板交互时,使用beforeChange()更改面板的状态。 当您单击按钮关闭所有toggle()时,仅打开处于打开状态的面板。