angular material docs、 mat-expansion-panel からわかるように、@ openedという名前の@Outputがあります。これは、アコーディオンアイテムが開かれたときに放出されます。その開かれたイベントをキャッチし、どのパネルが開かれたかを識別します。しかし、この単純なコード(以下)は常に未定義のみを返します。何が間違っていましたか?この出力は未定義のみを出力しますか?.
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);
}
これは仕様です。 ドキュメントサイト は、opened
イベントのタイプがvoid
であることを指定しているため、イベントには何も含まれていません。複数の拡張パネルに同じイベントハンドラを使用する場合は、次のようなものを使用できます。
<mat-expansion-panel (opened)="openGroup('expansion1')"></mat-expansion-panel>
<mat-expansion-panel (opened)="openGroup('expansion2')"></mat-expansion-panel>
または、多分あなたの場合により良い:
<mat-expansion-panel *ngFor="let element of Data" (opened)="openGroup(element.someProp)">