AngularJS ui-替换数据时网格保持选择状态

AngularJS ui-grid keep selection state when replacing data

我有一个 ui-grid 绑定到一个名为 data 的对象数组,如下所示:

$scope.grd = {
        enableRowSelection: true,
        multiSelect: true,
        enableRowHeaderSelection: false,
        columnDefs: [
                { field: 'id', name: 'ID' },
                { field: 'name', name: 'Name' },
                { field: 'tags', name: 'Tags' }
        ],
        data: "data"
};

如果我现在像这样替换数组中的项目:

$scope.data[i] = replacementData; 

网格已正确更新,但选择状态丢失。 我猜 selection 简单模块不支持这个,尽管 core 模块 does.

有没有办法在替换之前获取项目的选择状态?

我在选择模块的文档中找到了这个 GridRow class,它有一个 isSelected 属性 但不知道如何得到它...

这里有一个 Plunk 演示了该行为 - 请注意 selectionCount 在行被替换后也是错误的,因此某处一定有某种选定的项目信息。

Update:似乎替换绑定数组中的项目不会删除 ui-grid 在内部使用的 GridRow(也是 selectedCount 错误的原因)。在替换项目之前调用 unSelectRow 修复了计数,但 GridRow 仍然存在...

最终将 replacementData 中的所有属性复制到旧的 data 对象上。这样选择状态就会保留,并且不会创建新的 GridRow

Updated Plunk

angular.extend($scope.data[i], replacementData);