web-dev-qa-db-ja.com

Angular Material mat-expansion-panelオープンイベントは常に未定義を返します

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);
}
7
Andy Infin

これは仕様です。 ドキュメントサイト は、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)">
6
p4r1