为了记录,它在Angular 7中
令人惊讶的是,没有太多信息。我有一个小snafu的“工作”。通常,我要命中端点以每N秒获取快照数据。我不能保证数据中的任何内容:每次都可能是一个全新的集合。可能是一样的。可能是相同数据,但顺序不同。用户可能已经选择了一些行,并且需要在重新加载数据后以编程方式重新选择它们。
以下有问题的代码。因此,除了在n ^ 2处效率非常低外,它还可以工作,但是临时取消选中行的“闪烁”。在重新选择循环完成之前,是否有办法阻止渲染?
我很想听到其他处理重选策略。由于在getMessages()中我将rowData放回原处,因此节点ID完全不同,因此仅按每个ID进行搜索并重新选择将不起作用。如果我错了请纠正我。
reselect(selectedRows: Array<any>): void {
for (const selectedRow of selectedRows) {
this.gridApi.forEachNode( node => {
if (node.data.id1 === selectedRow.id1 && node.data.id2 === selectedRow.id2) {
node.setSelected(true);
}
});
}
}
getMessages(): void {
this.volumeService.getData()
.subscribe(data => {
let selectedRows: Array<any> = new Array<any>();
if (this.gridApi !== undefined) {
selectedRows = this.gridApi.getSelectedRows();
}
this.volumeDataWrapper = data;
// Reselection needs to happen outside of this callback
timer(0).subscribe( () => { this.reselect(selectedRows); });
})
}
答案 0 :(得分:0)
在重新选择循环完成之前,是否有办法阻止渲染?
至于显示渲染在重新选择循环完成之前被阻止,此答案可以为您提供帮助。
您可以使用showLoadingOverlay
中的gridApi
。
getMessages(): void {
this.gridApi.showLoadingOverlay(); // <-
this.volumeService.getData()
.subscribe(data => {
let selectedRows: Array<any> = new Array<any>();
if (this.gridApi !== undefined) {
selectedRows = this.gridApi.getSelectedRows();
}
this.volumeDataWrapper = data;
// Reselection needs to happen outside of this callback
timer(0).subscribe( () => {
this.reselect(selectedRows);
this.gridApi.hideOverlay(); // <-
});
})
}