У меня была та же проблема: при тестировании первого предложения у меня были некоторые ошибки, я мог исправить это, добавив «switch (property)»

я есть обычный DataTable Angular Material 2 с заголовками сортировки. Все виды заголовков работают нормально. За исключением одного с объектом в качестве значения. Это не сортирует вообще.

Например:

 <!-- Project Column - This should sort!-->
    <ng-container matColumnDef="project.name">
      <mat-header-cell *matHeaderCellDef mat-sort-header> Project Name </mat-header-cell>
      <mat-cell *matCellDef="let element"> {{element.project.name}} </mat-cell>
    </ng-container>

Обратите вниманиеelement.project.name

Вот конфигурация displayColumn:

 displayedColumns = ['project.name', 'position', 'name', 'test', 'symbol'];

изменения'project.name' в'project' не работает ни"project['name']"

Чего мне не хватает? Это вообще возможно?

Вот Stackblitz:Angular Material2 DataTable сортирует объекты

Редактировать: Спасибо за все ваши ответы. У меня уже есть работа с динамическими данными. Поэтому мне не нужно добавлять оператор switch для каждого нового вложенного свойства.

Вот мое решение: (Создание нового источника данных, расширяющего MatTableDataSource, не требуется)

export class NestedObjectsDataSource extends MatTableDataSource<MyObjectType> {

  sortingDataAccessor: ((data: WorkingHours, sortHeaderId: string) => string | number) =
    (data: WorkingHours, sortHeaderId: string): string | number => {
      let value = null;
      if (sortHeaderId.indexOf('.') !== -1) {
        const ids = sortHeaderId.split('.');
        value = data[ids[0]][ids[1]];
      } else {
        value = data[sortHeaderId];
      }
      return _isNumberValue(value) ? Number(value) : value;
    }

  constructor() {
    super();
  }
}

Ответы на вопрос(1)

Ваш ответ на вопрос