Странное поведение Angular mat-sort-header 5.2.4

Я использую mat-table в сочетании с mat-sort-header углового материала. Но странно то, что сортировка отлично работает на 2 из 6 столбцов (0 и 4). При сортировке остальных одна запись всегда вытягивается наверх, а остальные остаются несортированными или случайным образом «упорядоченными». Я надеюсь, что смогу предоставить достаточно кода, чтобы решить эту проблему. Там есть импорт, и он в основном скопирован из https://v5.material.angular.io/components/table/examples.

Стол

все остальные столбцы выглядят так же, как и во фрагменте

 <mat-table #matTable [dataSource] = "dataSource" matSort>
  <ng-container matColumnDef = "Status">
   <mat-header-cell *matHeaderCellDef mat-sort-header
....

Машинопись

@ViewChild(MatSort) sort: MatSort;

ngAfterViewInit() {
   this.dataSource.sort = this.sort;
}
ngOnInit() {
   this.dataSource = new MatTableDataSource(this.projectlist); 
}
//no specific code for sorting needed (I think)

Прошу прощения за то, что скриншот сделан на немецком языке, но вы должны понять, о чем я.

Отсортировано

Странное поведение Angular mat-sort-header 5.2.4

Есть идеи, как это исправить?

Соответствует ли ваш matColumnDef вашим именам свойств this.projectList?

J. S. 30.05.2018 13:16
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
1
3 251
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы matSortHeader работал, вам необходимо убедиться, что ваш matColumnDef совпадает с именем свойства вашего объекта источника данных. Например:

<ng-container matColumnDef = "status">
      <mat-header-cell *matHeaderCellDef
                       mat-sort-header>
       My header text
      </mat-header-cell>
      <mat-cell *matCellDef = "let row">
        {{row.status}}
      </mat-cell>
    </ng-container>

matColumnDef - это статус, поэтому ваша строка также должна иметь свойство с тем же именем:

export class MyDataSet {
 status: string;
}

В противном случае оператор сортировки не сможет выполнять свою работу. Вы также можете написать свой собственный dataAccessor:

  this.datasource.sortingDataAccessor = ((item: MyDataSet, sortHeaderId: string) => {
      // write code to get your property out of item using sortHeaderId
    });

Дополнительная информация здесь: https://material.angular.io/components/table/api#MatTableDataSource

Эмм да, вот и все. Я бы никогда этого не увидел. Два рабочих столбца, где совпадают "случайно"

Pablo 30.05.2018 13:35

Другие вопросы по теме