Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 将datasource设置为新的MatTable数据源7_Angular_Datasource_Mat Table - Fatal编程技术网

Angular 将datasource设置为新的MatTable数据源7

Angular 将datasource设置为新的MatTable数据源7,angular,datasource,mat-table,Angular,Datasource,Mat Table,当我将数据源设置为数组,并尝试将dataSource设置为新的mat表dataSource以能够使用过滤时,我会得到错误: 类型“MatTableDataSource”缺少类型“TableRecord[]”中的以下属性:长度、pop、push、concat等 但是,如果我将数据源设置为任意值,它就可以正常工作。有人能帮我理解为什么: 服务.ts export interface PaginatedListResponse<TableRecord>{ length: number,

当我将数据源设置为数组,并尝试将
dataSource
设置为新的mat表
dataSource
以能够使用过滤时,我会得到错误:

类型“MatTableDataSource”缺少类型“TableRecord[]”中的以下属性:长度、pop、push、concat等

但是,如果我将数据源设置为任意值,它就可以正常工作。有人能帮我理解为什么:

服务.ts

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: MatTableDataSource<TableRecord> = new MatTableDataSource([]) ;

您将数据源声明为
TableRecord[]
然后立即将其切换为类型
MatTableDataSource
,因为数据来自具有分页功能的后端。所以我使用的是ObservableAttattable,需要MatTableDataSource类型的对象或简单数组。最初,您定义了TableRecord类型的数组,但尝试将该数组用作MatTableDataSource。我的更改将其定义为MatTableDataSource。MatTableDataSource的属性之一是“data”,它是您定义的类型的数组“数据”总是一个数组,这就是为什么在数据源的键入中省略[]。您不必立即定义“new MatTableDataSource([]),仅当您希望在.data中为其分配空数组,而不是未定义整个对象时,才需要这样做。
dataSource: MatTableDataSource<TableRecord> = new MatTableDataSource([]) ;
   this.dataSource.data = response.tableRows;