0

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

1 回答 1

0

Angular 在遍历组件时使用本地存储来存储数据,正如您在上面提到的那样,数据源会在组件的初始化时刷新。

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

于 2017-09-05T10:20:17.513 回答