Для меня лучшим решением является добавление нового свойства ie к источнику данных, «расширенному»
export interface PeriodicElement {
...
expanded?: boolean;
}
Затем, когда вы щелкаете в tr, мы меняем это значение
<tr mat-row *matRowDef="let element; columns: columnsToDisplay;"
class="example-element-row"
[class.example-expanded-row]="element.expanded"
(click)="element.expanded = !element.expanded">
</tr>
Наконец, вы говорите, когда раскрывается как
<div class="example-element-detail"
[@detailExpand]="element.expanded ? 'expanded' : 'collapsed'">
Для show all вы создаете функцию, которая переводит расширенную переменную источника данных в true -or false, если все true
showAll() {
if (this.dataSource.some(x => !x.expanded))
this.dataSource.forEach(x => (x.expanded = true));
else
this.dataSource.forEach(x => (x.expanded = false));
}
См. стекблиц