angular - Angular组件中的排序表
问题描述
我有两个 Angular 组件,一个是整个页面,它加载另一个组件,它只是一个表格。
该表通过
<app-detections-table [dataSource]="dataSource"></app-detections-table>
in加载detections.component.html
。
在detections-table.component.html
我添加了
<table
mat-table
[dataSource]="dataSource"
#sort
matSort="sort"
>
和<th mat-header-cell *matHeaderCellDef mat-sort-header>Name</th>
每个列标题。
在detections-table.component.ts
我添加
ngAfterViewInit() {
this.dataSource.sort = this.sort;
}
现在,我得到了表格上的排序箭头,但是当我单击它们时没有任何反应。
如果我从表组件中删除数据源的传递,detections.component.html
并且只在表组件中使用 JSON 对象,那么它会按预期工作,所以我认为排序detections-table.component.ts
“为时已晚”,这就是我尝试添加this.dataSource.sort = this.sort
到末尾的原因ngOnInit()
中detections.component.ts
,但这也没有做任何事情。
有人有小费吗?谢谢!
解决方案
我在 mat-table 上遇到过类似的问题,我通过在 @Input 上使用 setter 并在单独的函数中加载表属性来解决它。
tableData = new MatTableDataSource([]);
@Input() set dataSource(value: any[]) {
if(value) {
this.loadTable(value);
}
}
对于 loadTable,您可以执行以下操作:
loadTable(data: any[]) {
this.tableData = new MatTableDataSource(data);
this.tableData.sort = this.sort;
}
在此示例中,“tableData”变量成为您用于表的数据源,因此:
<table
mat-table
[dataSource]="dataSource"
#sort
matSort="sort"
>
会变成这样:
<table
mat-table
[dataSource]="tableData"
#sort
matSort="sort"
>
希望这可以解决您的问题!
推荐阅读
- firebase - 如何从http云函数的请求对象中获取值
- php - Laravel - 最后使用 OS cron 作业时,调度时间设置的用途是什么?
- git - 远程错误:tls:使用 go get 拒绝访问
- html - 定义或无序列表?
- python - 在python中获取回调函数的属性名称
- android - Android测试一个返回布尔值的公共静态方法总是返回false
- node.js - 在Angular 6中上传文件时如何限制某些文件类型
- c# - azure blob 存储在下载时允许多个连接
- mysql - 带有类似运算符的 MySQL 存储过程
- node.js - 如何从 action-on-google 获取设备位置