angular - 在加载时数据更改时循环子组件数据?
问题描述
目前,我的 Angular 应用程序中有以下代码(简化版)。
父组件(html):
<div *ngIf="statistic | async">
<div *ngFor="let item of data">
{{item}}
</div>
<app-pager [init]="statistic.data" (dataChange)="data = $event"></app-pager>
</div>
子组件(ts):
export class PagerComponent implements OnInit {
public data: any[] = [];
public pageIndex: number = 1;
public pageTotal: number = 1;
public itemsPerPage: number = 15;
@Input() public set init(data: any[]) {
this.data = data;
this.pageTotal = Math.ceil(data.length / this.itemsPerPage);
}
@Output() dataChange = new EventEmitter<any[]>();
ngOnInit(): void {
this.selectPage(1);
}
selectPage(page: number) {
this.pageIndex = page;
this.dataChange.emit(this.data.slice((this.pageIndex - 1) * this.itemsPerPage, this.pageIndex * this.itemsPerPage));
}
previousPage() {
if (this.hasPreviousPage()) {
this.selectPage(this.pageIndex - 1);
}
}
hasPreviousPage(): boolean {
return this.pageIndex > 1;
}
nextPage() {
if (this.hasNextPage()) {
this.selectPage(this.pageIndex + 1);
}
}
hasNextPage(): boolean {
return this.pageIndex < this.pageTotal;
}
}
运行此代码时,控制台会引发 ExpressionChangedAfterItHasBeenCheckedError 错误,这是正常的,因为当加载子组件时数据发生更改时,它会循环数据。是否有这样做的正确方法,或者我应该让子组件跟踪页面并返回当前页面,而父组件跟踪需要循环的数据?
解决方案
推荐阅读
- c++ - 如何拥有 QMap 的 QVector
- javascript - 重新安装 discord.js 时组合流脚本出错
- python - 与 Python 中的字典比较
- python - 我可以从 python 中的方法装饰器编辑类变量吗?
- c# - 如何通过单击按钮更改多个对象的纹理?
- c# - C#如何分配静态类的默认属性值
- huawei-mobile-services - 自检中报告的结果代码 22:未集成 checkUpdate API
- angular - 如何在 Angular 中使用 Typescript 方法更改 CSS 样式?
- asp.net-core - 执行请求时发生未处理的异常。System.NullReferenceException:对象引用未设置为对象的实例
- swift - 如何防止我的 SwiftUI 视图在滚动时调整大小