Обновление
Как отмечалось в комментариях ниже, Flex-макет изменился с версии 7.0.0, а ObservableMedia
устарел и заменен на MediaObserver
, подробности здесь .
Вот изменения, которые необходимо внести в код, который я первоначально разместил для нового синтаксиса:
import { MediaObserver, MediaChange } from '@angular/flex-layout';
...
export class MyComponent implements OnInit, OnDestroy {
displayedColumns: string[];
dataSource = new MatTableDataSource</* Type of Data */>();
currentScreenWidth: string = '';
flexMediaWatcher: Subscription;
// ... other variables
constructor(private mediaObserver: MediaObserver) {
this.flexMediaWatcher = mediaObserver.media$.subscribe((change: MediaChange) => {
if (change.mqAlias !== this.currentScreenWidth) {
this.currentScreenWidth = change.mqAlias;
this.setupTable();
}
}); // Be sure to unsubscribe from this in onDestroy()!
};
setupTable() {
this.displayedColumns = ['internalId', 'alias', 'name', 'job'];
if (this.currentScreenWidth === 'xs') { // only display internalId on larger screens
this.displayedColumns.shift(); // remove 'internalId'
}
};
}
Оригинальный ответ:
Похоже, вам не хватает некоторых данных в вашем вопросе. В шаблоне должно быть определение, определяющее строку: <mat-header-row> and <mat-row>
теги. Внутри тега mat-header-row отображаемые столбцы являются частью * matHeaderRowDef. Например:
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
Эта переменная (в данном случае displayColumns) определяет, какие столбцы действительно отображаются. Вы используете fxHide, поэтому вы можете импортировать ObservableMedia в свой компонент и внедрить его, а затем использовать наблюдаемое, которое он выдает при изменении размера экрана для изменения отображаемых столбцов. Подробности здесь . например:
import { ObservableMedia, MediaChange } from '@angular/flex-layout';
...
export class MyComponent implements OnInit, OnDestroy {
displayedColumns: string[];
dataSource = new MatTableDataSource</* Type of Data */>();
currentScreenWidth: string = '';
flexMediaWatcher: Subscription;
// ... other variables
constructor(private media: ObservableMedia) {
this.flexMediaWatcher = media.subscribe((change: MediaChange) => {
if (change.mqAlias !== this.currentScreenWidth) {
this.currentScreenWidth = change.mqAlias;
this.setupTable();
}
}); // Be sure to unsubscribe from this in onDestroy()!
};
setupTable() {
this.displayedColumns = ['internalId', 'alias', 'name', 'job'];
if (this.currentScreenWidth === 'xs') { // only display internalId on larger screens
this.displayedColumns.shift(); // remove 'internalId'
}
};
}
Теперь ваша таблица будет реагировать, если пользователь переворачивает свой телефон, например, в альбомный режим.