【问题标题】:Angular Material Table with sort and paginator带有排序和分页器的角材料表
【发布时间】:2019-05-03 22:18:08
【问题描述】:

我在我的项目中使用了 Angular 材质表。表的数据将由父组件通过 Input 传递。这工作正常。我还想在我的表中添加一个分页器,并且一列应该是可排序的。但是在设置排序和分页器时出现错误“....无法设置.sort of undefined”。

<div id="table-overflow">
    <mat-table [dataSource]="dataSourceLog" class="mat-elevation-z8" matSort matSortDisableClear>
        <ng-container matColumnDef="actionTS">
            <mat-header-cell *matHeaderCellDef mat-sort-header>TimeStamp</mat-header-cell>
            <mat-cell *matCellDef="let element"> {{element.actionTSFormated}} </mat-cell>
        </ng-container>
        /* some more columns*/
        <mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></mat-header-row>
        <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
    </mat-table>
</div>
<mat-paginator [pageSizeOptions]="[10, 20, 50]" showFirstLastButtons></mat-paginator>

.ts 文件

export class ProtocolLogTable implements OnInit{
    @Input() dataSourceLog: MatTableDataSource<DataLog>;
    timestampFrom: string;
    timestampTo: string;

    displayedColumns: string[] = ['actionTS' /* some more columns */];

    @ViewChild(MatPaginator) paginator: MatPaginator;
    @ViewChild(MatSort) sort: MatSort;

    ngOnInit() {
        this.dataSourceLog.sort = this.sort;
        this.dataSourceLog.paginator = this.paginator;
    }
}

【问题讨论】:

  • 如果您可以尝试在表格中使用primeng - 它会提供更多功能

标签: angular angular-material paginator


【解决方案1】:

您可能不会在创建组件后立即获取数据。尝试将您的代码从 ngOnInit 移动到 @Input 这样的设置器

public dataSourceLogValue: MatTableDataSource<DataLog>;

@Input()
public set dataSourceLog(value: MatTableDataSource<DataLog>) {
  if (value) {
    this.dataSourceLogValue = value;
  }
}

并确保在模板中将dataSourceLog 重命名为dataSourceLogValue

【讨论】:

  • 像魅力一样工作。谢谢
猜你喜欢
  • 2018-06-22
  • 2021-08-03
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多