Вы должны реализовать функцию, которая фильтрует отображаемые вами столбцы mat-table
. Я полагаю, у вас есть такая строка в вашем коде:
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
Затем в вашем компоненте вам нужно написать функцию, которая фильтрует displayedColumns
на основе фактических данных, которые вы показываете.
Это может выглядеть примерно так (в зависимости от вашей модели данных и т. Д.):
public toggle(event: MatSlideToggleChange) {
if (event.checked) {
const columns = this.getEmptyColumns();
this.displayedColumns = this.defaultColumns.filter(col => !columns[col]);
} else {
this.displayedColumns = this.defaultColumns;
}
}
public getEmptyColumns(): {[key: string]: boolean} {
const columns = {};
this.defaultColumns.forEach(col => {
columns[col] = this.dataSource.every(element => {
return !element[col];
});
});
return columns;
}
Функция toggle
запускается нашим mat-slide-toggle
и фильтрует столбцы, которые отображаются на основе данных. Функция getEmptyColumns
проверяет для каждого свойства, являются ли все строки пустыми, и возвращает объект со свойством в качестве ключа и значением, является ли столбец пустым. На основании этого мы затем фильтруем столбцы, которые мы хотим отобразить.
Выезд
это
stackblitz. Это простой пример того, как вы можете скрыть столбцы empy
с переключателем и должен дать вам представление о том, как реализовать это для вашего решения.
Примечание. Похоже, что ваши данные являются вложенными. Это означает, что вам придется реализовать некоторую дополнительную логику при извлечении пустых столбцов, поскольку вы не можете напрямую получить доступ к данным с помощью вложенных свойств.