Демонстрация Stackblitz
Вам придется отключить mat-expansion-panel
(его все равно можно открыть программно). Кроме того, вам нужно исправить стиль CSS, потому что по какой-то причине переключатель переключается вверх при нажатии на него. Итак, давайте начнем со стилей:
.fix-radio-position .mat-expansion-panel
.mat-expansion-panel-header mat-panel-description
.mat-radio-button {
line-height: 2;
}
Теперь примените класс css к элементу accordion:
<mat-accordion class="fix-radio-position" hideToggle="true">
...
</mat-accordion>
Вам нужно будет отключить свои панели, добавив disabled
атрибут, и поместите переменную ссылки шаблона на каждую из них, чтобы мы могли передавать их в качестве аргументов, нажимая переключатели:
<mat-expansion-panel #panel1 disabled>
...
</mat-expansion-panel>
<mat-expansion-panel #panel2 disabled>
...
</mat-expansion-panel>
Немного измените сигнатуру события onChange
, чтобы вы могли передать родительская панель в качестве параметра:
<mat-radio-button (change)="onChange($event, panel1)">Service 1</mat-radio-button>
...
<mat-radio-button (change)="onChange($event, panel2)">Service 2</mat-radio-button>
Наконец, ваш метод onChange
становится:
onChange(radio: MatRadioChange, panel: MatExpansionPanel) {
panel.open();
}