Comme vous le savez peut-être de angular matériaux, mat-expansion-panel ont @Output nommé "open", qui est émis lorsque l'élément d'accordéon est ouvert. Je veux pour capturer cet événement ouvert et identifier le panneau qui a été ouvert. Mais ce code simple (ci-dessous) renvoie toujours uniquement indéfini. Qu'est-ce que j'ai fait de mal?.
component.html
<mat-accordion multi>
<mat-expansion-panel (opened)="openGroup($event)" *ngFor="let element of Data">
<mat-expansion-panel-header>
<mat-panel-title>
<ul class="nav-tabs">
<li class="col-xs-3">{{element.param1}}</li>
<li class="col-xs-5">{{element.param2}}</li>
<li class="col-xs-3">{{element.param3}}</li>
</ul>
</mat-panel-title>
</mat-expansion-panel-header>
<div>
<p>{{element.content}}</p>
</div>
</mat-expansion-panel>
</mat-accordion>
component.ts
Data = [
// This returns from backend, this is only for show that the Data is not empty
{ /* some data here*/ },
{ /* some data here*/ },
{ /* some data here*/ }
];
openGroup(e) {
console.log(e);
}
C'est par conception; le site docs spécifie que le type de l'événement opened
est void
, donc l'événement ne contient rien. Si vous souhaitez avoir le même gestionnaire d'événements pour plusieurs panneaux d'extension, vous pouvez utiliser quelque chose comme ceci:
<mat-expansion-panel (opened)="openGroup('expansion1')"></mat-expansion-panel>
<mat-expansion-panel (opened)="openGroup('expansion2')"></mat-expansion-panel>
ou, peut-être mieux pour votre cas:
<mat-expansion-panel *ngFor="let element of Data" (opened)="openGroup(element.someProp)">