angular - 物料表 - 无法正确实施
问题描述
我正在尝试使用此处Table retrieving data through HTTP
的示例中的 mat table
<table mat-table [dataSource]="data" matSort matSortActive="created" matSortDisableClear matSortDirection="desc">
<!-- firstname Column -->
<ng-container matColumnDef="firstname">
<th mat-header-cell *matHeaderCellDef>Vorname</th>
<td mat-cell *matCellDef="let row">{{row.firstname}}</td>
</ng-container>
</table>
export class AccessManagerComponent implements OnInit {
displayedColumns = ['firstname'];
data: Observable<any>;
@ViewChild(MatSort) sort: MatSort;
constructor(
private backendService: BackendService
) { }
ngOnInit(): void {
}
ngAfterViewInit(): void {
this.data = this.sort.sortChange.pipe(
startWith({}),
switchMap(() => {
return this.backendService.getUsers(this.sort.active, this.sort.direction)
}),
tap(console.log),
map(response => response.items)
)
}
}
它正在工作,但是我收到错误ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
,因为sort
仅在视图初始化后才初始化。
sort
只要表没有被渲染,就不会被初始化,但是一旦表被渲染,我就会得到这个错误,因为它会触发一个新的提取(它应该)。
如果我在组件内部订阅并设置data
在那里,我能够解决这个问题,但是找到一个允许我使用 observable 作为 mat 表的数据源的解决方案会很好。
解决方案
推荐阅读
- json - Postgres - 将两个数组合并成一个 JSON
- macos - 在 Mac OS 上设置 Maven 时遇到问题
- docker - 在生产中使用 rabbitmq 和 docker
- sql - 酒店预订的数据库设计问题
- java - 如何在 MacBook 上对齐黄瓜示例
- bash - 如何在bash中将具有唯一字符串的行添加到文件和具有相同字符串的目录
- reactjs - 如何在具有一组状态的组件中进行多次调度?
- ios - 如何展开具有表格视图的自定义集合视图单元格?
- java - JHipster如何将每个文件名映射到其对应的模板类名?
- react-native - componentDidMount 换屏