我发现如果应用排序,行Id将不再映射到数据数组的索引。
这里有一个简单的演示:http://plnkr.co/edit/irVXdjAoCvAKPxQ1uD4P?p=preview
这是故意的行为吗?或者,这是一个bug吗?
我知道有row.entity可以获取整行信息,但它不能帮助我直接指向数据数组。(除非对整个数组应用额外的循环,这是最坏的情况)
那么,有没有人知道在应用排序之后,有没有什么指针/引用/变量可以用来指向数据数组的相应行呢?谢谢。
发布于 2014-02-06 05:42:19
最后,我找到了一种方法,即使在应用排序时也可以获得相应的数组索引。
演示:http://plnkr.co/edit/irVXdjAoCvAKPxQ1uD4P?p=preview
通过这样使用rowMap,
$scope.gridOptions.ngGrid.rowMap.indexOf(rowItem.rowIndex);这并未记录在案,因此请注意,未来的补丁/更新可能会影响此实现。
更新:随着进一步的研究,我发现multiSelect等于false的selectedItems可能也有同样的作用。但是,如果您需要使用multiSelect:true的网格,那么它的工作方式就不完全一样了。
发布于 2014-07-08 01:44:19
谢谢你的回答,这非常有用。要在删除后将选定内容移动到下一行,您可以这样做(单选)
//步骤01:记住当前选择的rowindex:
gridOptions.afterSelectionChange: function(row, event) {
$scope.gridOptions.rowIndex = row.rowIndex;}//步骤02:删除行并移动选定内容
$scope.deleteRecord = function() {
var arrayIndex = $scope.gridOptions.ngGrid.rowMap.indexOf(rowItem.rowIndex);
var rowIndex = $scope.gridOptions.rowIndex; `on sorted grids these to might differ`
var e = $scope.$on('ngGridEventData', function() {
if (rowIndex >= $scope.gridItems.length) {
// last element is deleted, thus move selection up
rowIndex--;
}
if (rowIndex >= 0) {
$scope.gridOptions.selectRow(rowIndex, true);
$scope.focusRow(rowIndex);
e(); // deregister the listener
$scope.entity2View();
}
});
$scope.gridItems.splice(arrayIndex, 1);});https://stackoverflow.com/questions/21584629
复制相似问题