如何在使用智能表更改页面后保持选择?

时间:2017-06-20 16:42:34

标签: angular typescript ng2-smart-table

我使用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() );
      }
    });
  });
});
}

1 个答案:

答案 0 :(得分:0)

Angular在遍历组件时使用本地存储来存储数据,通过上面提到的数据源刷新onInit组件。

您必须使用服务来存储您希望在遍历时保留的数据,并通过组件的onInit将此数据设置为数据源。