渲染ngFor时ExpressionChangedAfterItHasBeenCheckedError

时间:2017-12-07 12:21:10

标签: angular

首先 - 我知道有关此异常的很多帖子。我一直在阅读有关变化检测机制的内容 - 我有点理解,我的问题是什么。我只是不知道如何解决它。

我的页面呈现的是一个带有每行复选框的表格。用户可以检查任何数字并选择删除这些行。选定的行ID绑定到组件中的Map。在模态确认窗口中,所有选定的行都按公共标识符显示和分组(某些行具有相同的groupId)。

模态窗口中的表格是使用计算公共标识的地图的方法来呈现的,该方法包含具有该公共标识符的行列表:

getGroupedReportsMarkedForDeletion():Map<string, ReportRowEntryModel[]> {
    let groupedReports: Map<string, ReportRowEntryModel[]> = new Map();
    this.allReports.forEach(report => {
        if(this.selectedReportsForDeletion.get(report.id)) {
            if(groupedReports.has(report.groupId())) {
                groupedReports.get(report.groupId()).push(report);
            } else  {
                groupedReports.set(report.groupId(), [report]);
            }
        }
    });
    return groupedReports;
}

在初始渲染过程中,这显然是空的。我什么时候检查一行ExpressionChangedAfterItHasBeenCheckedError,引用包含*ngFor迭代&#34; groupedReports&#34;

的行。
<div id="selectedReportsGroup_{{group}}" *ngFor="let group of getGroupedReportsMarkedForDeletion()?.keys()">

我该如何解决这个问题?任何建议赞赏:)

Angular:^ 5.0.2
AngularCli:1.5.3

0 个答案:

没有答案