Хорошо, поэтому я попробовал другое решение, StackBlitz ЗДЕСЬ .
На этот раз мне удалось использовать идентификатор для управления панелью.Здесь я использую уникальный идентификатор на каждой панели расширения матов (#first
для панели_1, #second
для панели_2, ...).
<mat-accordion multi="true">
<mat-expansion-panel #first></mat-expansion-panel>
<mat-expansion-panel #second></mat-expansion-panel>
<mat-expansion-panel #third></mat-expansion-panel>
</mat-accordion>
Я также использовал кнопки для управления этими панелями, не взаимодействуя с ними.
<button mat-raised-button (click)="changeState1()">ON/OFF Panel_1</button>
<button mat-raised-button (click)="changeState2()">ON/OFF Panel_2</button>
<button mat-raised-button (click)="changeState3()">ON/OFF Panel_3</button>
В вашем коде TypeScript вы используете @ViewChild для получения идентификатора панели, чтобы вы могли управлять им.
@ViewChild('first') first: MatExpansionPanel;
@ViewChild('second') second: MatExpansionPanel;
@ViewChild('third') third: MatExpansionPanel;
Затем я создал функции для открытия одной из них, чтобы закрыть панель расширения матов в соответствии с ее идентификатором и в соответствии с ее состоянием.
changeState1() {
if(this.first.expanded){
this.first.close();
} else {
this.first.open();
}
}
changeState2() {...}
PS: <mat-accordion multi="true">
позволяет открывать несколько панелей одновременно.
DEMO: