我使用smart-table(1)允许用户从预览div中显示的不同页面中选择记录。
当前的问题是,当我从第一页选择一些记录时,导航到秒,然后导航回第一页,第一页中的选择不会反映先前的选择。
当前选择是否保存在名为operatorSelection(2)的映射中,我的第一次尝试是在onChangedSource事件(3)之后再次选择行,但即使在调用multipleSelectRow()之后,getSelectedRows()也不会返回预期的行。
页面更改后还有其他方法可以保留选择吗?或从代码中选择行的其他方式?
以下是代码片段:
(1)组件html
<div class="col-lg-6">
<ng2-smart-table #grid [settings]="settings" [source]="source" (userRowSelect)="onUserRowSelect($event)">
</ng2-smart-table>
</div>
(2)行选择的组件代码
onUserRowSelect(event) {
console.log('on UserRowSelect', event, this.operatorSelection);
if (event.isSelected) {
this.operatorSelection.set(event.data.code, event.data);
} else {
this.operatorSelection.delete(event.data.code);
}
this.updatePreview();
}
(3)我在页面更改后尝试更新选择
ngAfterViewInit(): void {
this.table.grid.source.onChangedSource.subscribe(() => {
this.operatorSelection.forEach((row) => {
this.table.grid.source.data.forEach((element) => {
if (element.code == row.code) {
console.log('--- reselect ', row.code );
this.table.grid.multipleSelectRow(row);
console.log('*** selected ', this.table.grid.getSelectedRows() );
}
});
});
});
}
答案 0 :(得分:0)
Angular在遍历组件时使用本地存储来存储数据,通过上面提到的数据源刷新onInit组件。
您必须使用服务来存储您希望在遍历时保留的数据,并通过组件的onInit将此数据设置为数据源。