По сути, вы поддерживаете переменную, которая будет отслеживать ваш открытый, закрытый статус. В вашем массиве dataSource для каждой строки изначально есть переменная rowStatus false:
[
{'column1': 'data', 'column2': 'data', 'rowStatus': false},
{'column1': 'data', 'column2': 'data', 'rowStatus': false},
{'column1': 'data', 'column2': 'data', 'rowStatus': false},
]
В вашем. html, для столбца вы можете добавить событие клика:
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" (click)="columnClicked(row)"></tr>
Теперь Хак - это отрицать rowStatus после нажатия на столбец в .ts:
columnClicked(element) {
element.rowStatus = !element.rowStatus
}
В любой момент времени, если rowStatus имеет значение false, он закрывается. иначе это открыто. Но тогда эта переменная (rowStatus) рекомендуется находиться в объекте массива столбца вашей таблицы. Таким образом, каждый столбец будет иметь уникальную переменную rowStatus и открыт, закрытие каждого столбца будет независимым. Надеюсь, я в порядке. Это очень абстрактно, и это должно работать для вас. Просто измените ваш массив объектов соответственно