所有手风琴面板都同时打开?

时间:2019-10-06 15:59:16

标签: javascript html css angular accordion

我试图在Angular中从头开始创建手风琴。

我具有打开和关闭一个面板的功能,但是当我介绍一个面板时,我发现它们都可以一次打开。

有什么我想念的吗?

这里是stackblitz可以玩

component.ts

export class AppComponent  {
  collapsed = true;

  toggle(el) {
    this.collapsed = !this.collapsed;
  }
}

component.html

<div class="header"
  [ngClass]="{'upArr open': !collapsed, 'downArr': collapsed}" 
  (click)="toggle(this)">
    title
</div>
<div class="body" [ngClass]="{'collapsed': collapsed}">
  data
</div>

<div class="header"
  [ngClass]="{'upArr open': !collapsed, 'downArr': collapsed}" 
  (click)="toggle(this)">
    title
</div>
<div class="body" [ngClass]="{'collapsed': collapsed}">
  data
</div>

component.css

.header {
  background: #CB1C6F;
  cursor: pointer;
  width: 100%;
  font-size: 2em;
  color: white;
}

.header:hover {
  background: #7F045D;
}

.upArr::after {
  float: right;
  content: '\25b2';
}

.downArr::after {
  float: right;
  content: '\25bc';
}

.body {
  background: lightblue;
  overflow: hidden;
  width: 100%;
}

.collapsed {
  height: 0px;
}

.open {
  background: #00A1CC
}

.open:hover {
  background: #005DA1
}

2 个答案:

答案 0 :(得分:0)

它们全部折叠(或不折叠),具体取决于collapsed变量。

我会考虑使用*ngFor循环创建不同的手风琴,如下所示:

component.ts

export class AppComponent  {
  public accordions = [
{
title: 'Some title',
data: 'Some data',
collapsed: true
},
{
title: 'Some title2',
data: 'Some data2',
collapsed: true
}
]

  toggle(el) {
    this.accordions[el].collapsed = !this.accordions[el].collapsed;
  }
}

component.html

<div *ngFor="let accordion of accordions; let i = index">
    <div class="header"
      [ngClass]="{'upArr open': !accordion.collapsed, 'downArr': collapsed}" 
      (click)="toggle(i)">
        {accordion.title}
    </div>
    <div class="body" [ngClass]="accordions[i].collapsed? 'colapsed' : ''">
      {accordion.data}
    </div>
</div>

答案 1 :(得分:0)

请将此代码替换为您的代码。

export class AppComponent  {
  public accordions = [
    {
      title: 'head1',
      data: 'content 1 ',
      collapsed: false
    },
    {
      title: 'head2',
      data: 'content 2',
      collapsed: true
    }
  ]

  toggle(el) {
    this.accordions[el].collapsed = !this.accordions[el].collapsed;
  }
}


<div *ngFor="let accordion of accordions; let i = index">
    <div class="header" [ngClass]="{'upArr open': !accordion.collapsed, 'downArr': collapsed}" 
      (click)="toggle(i)">
        {{accordion.title}}
    </div>
    <div class="body" [ngClass]="accordions[i].collapsed? 'collapsed' : ''">
      {{accordion.data}}
    </div>
</div>