Установка источника данных на новый источник данных MatTable Angular 7

Когда я устанавливаю свой источник данных в массив и пытаюсь установить dataSource в новую таблицу матов dataSource, чтобы иметь возможность использовать фильтрацию, я получаю сообщение об ошибке:

Type 'MatTableDataSource' is missing the following properties from type 'TableRecord[]': length, pop, push, concat, and 24 more.

Однако, если я установлю источник данных на любой, он будет работать нормально. Может кто-нибудь, пожалуйста, помогите мне понять, почему:

сервис.тс

export interface PaginatedListResponse<TableRecord>{
  length: number,
  tableRows: Array<TableRecord>
}

export interface TableRecord{
  x: string,
  y: string,
  z: boolean,

}

.тс

dataSource: TableRecord[] = [];
this.dataSource = new MatTableDataSource(response.tableRows);
//errror: Type 'MatTableDataSource<TableRecord>' is missing the following properties from type 'TableRecord[]': length, pop, push, concat, and 24 more.

рабочий пример

    dataSource: any;
    this.dataSource = new MatTableDataSource(response.tableRows);
   //No error

По какой причине вы объявляете dataSource как TableRecord[], а затем сразу переключаете его на тип MatTableDataSource?

Jesse 30.05.2019 15:22

потому что данные поступают из бэкэнда с разбиением на страницы. Итак, я использую наблюдаемый

Flash 30.05.2019 15:46
Тестирование функциональных 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
1
2
2 401
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Неверное объявление источника данных. Сделай это так:

dataSource: MatTableDataSource<TableRecord> = new MatTableDataSource([]) ;

Затем, когда вы получаете данные из бэкэнда:

   this.dataSource.data = response.tableRows;

MatTable нужен объект типа MatTableDataSource или простой массив. Первоначально вы определили массив типа TableRecord, но попытались использовать этот массив как MatTableDataSource. Мое изменение определило его как MatTableDataSource. Одним из свойств MatTableDataSource является «данные», представляющие собой массив определяемого вами типа. «данные» всегда являются массивом, поэтому вы опускаете [] в типе источника данных. Вам не нужно сразу определять «новый MatTableDataSource ([])» - это только в том случае, если вы хотите, чтобы ему был назначен пустой массив в .data, а не весь объект был неопределенным.

Lars Rødal 30.05.2019 17:01

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