Я не думаю, что это пока поддерживается, посмотрите эту проблему Github здесь .
Но вы могли бы просто отсортировать данные самостоятельно, вместо того чтобы полагаться на источник данных Материала, чтобы сделать это за вас, чего в любом случае сейчас не может быть (сортировка по нескольким полям).
Вот быстрый stackblitz , который я бросил вместе.
Он вообще не использует matSort
и просто сортирует данные самого источника данных через массив Sort
объекты:
export interface Sort {
id: string;
direction: 'asc' | 'desc';
}
multiSort: Sort[] = [
{ id: 'position', direction: 'desc' },
{ id: 'weight', direction: 'asc' },
{ id: 'name', direction: 'asc' }
];
А затем функция, которая использует конфигурацию сортировки:
public sort() {
if (!this.multiSort) {
return;
}
let sortedData: PeriodicElement[];
this.multiSort.forEach(sort => {
sortedData = this.dataSource.data
.sort((a, b) => {
if (sort.direction === 'asc') {
return a[sort.id] > b[sort.id] ? 1 : -1;
} else if (sort.direction === 'desc') {
return a[sort.id] > b[sort.id] ? -1: 1;
} else {
return 0;
}
});
});
this.dataSource.data = sortedData;
}
Это может быть не идеально, но в зависимости от ваших требований подобное решение может заставить вас решить эту проблему.