Псевдоним привязки ячеек мат-таблицы

Я пытаюсь включить сортировку для mat-table, и я понял, что *matColumnDef и элемент привязки должны иметь одно и то же имя.
В моем случае мне нужно вызвать геттер элемента.

Как мне с этим справиться? Могу я определить псевдоним?

<ng-container matColumnDef="name">
  <th mat-header-cell *matHeaderCellDef> NAME </th>
  <td mat-cell *matCellDef="let person"> {{person.getName()}} </td>
</ng-container>

Могу ли я указать где-нибудь псевдоним person.getName() на name, чтобы он совпадал с matColumnDef?

РЕДАКТИРОВАТЬ:
Я пробовал что-то вроде ниже, но это не сработало:

<ng-container matColumnDef="name">
  <th mat-header-cell *matHeaderCellDef> NAME </th>
  <td mat-cell *matCellDef="let person; let name = person.getName()"> {{name}} </td>
</ng-container>

person codentary    schedule 25.11.2019    source источник
comment
Извините, но я не совсем понимаю, чего вы пытаетесь достичь. Сможете ли вы создать stackblitz для задачи, которую собираетесь решить?   -  person yurzui    schedule 25.11.2019


Ответы (1)


Извините за это, но с этого момента все станет немного сложнее.

После того, как вы установили настраиваемое поле, вам нужно будет объяснить angular, как получить доступ к реальным «данным» для сортировки.

Вот пример кода:

@ViewChild(MatSort) sort: MatSort;

constructor() {
   this.datasource = new MatTableDataSource();
}


ngOnInit() {
  this.datasource.sort = this.sort;

  this.datasource.sortingDataAccessor = (person: Person, field: string) => {
    switch (field) {
      case 'name': return person.getName();
      default: throw new Error('Unknown field used for sorting: ' + field);
    }
  };
}

Вам следует взглянуть на документацию => https://material.angular.io/components/table/api#MatTableDataSource

person millenion    schedule 25.11.2019
comment
Спасибо, звучит хорошо, но у меня есть еще одна проблема, которая мешает мне приступить к тестированию sortingDataAccessor. Я поднял здесь еще один вопрос: stackoverflow.com/questions/59050538/ - person codentary; 26.11.2019