Angularjs 角度ng网格:rowItem.rowIndex排序后未映射到数据数组的索引

Angularjs 角度ng网格:rowItem.rowIndex排序后未映射到数据数组的索引,angularjs,angular-ui,ng-grid,Angularjs,Angular Ui,Ng Grid,我发现,如果应用排序,行Id将不再映射到数据数组的索引 这里有一个简单的演示: 这是故意的行为吗?或者,这是一个错误 我知道有row.entity可以获取整行信息,但它不能帮助我直接指向数据数组。(除非对整个阵列应用了额外的循环,这是我要做的最坏的情况) 那么,在应用排序后,是否有人知道我可以使用任何指针/引用/变量来指向数据数组的对应行?谢谢。最后,我找到了一种方法,即使在应用排序的情况下也可以获得数组的相应索引 此处演示: 通过像这样使用行映射 $scope.gridOptions.ng

我发现,如果应用排序,行Id将不再映射到数据数组的索引

这里有一个简单的演示:

这是故意的行为吗?或者,这是一个错误

我知道有row.entity可以获取整行信息,但它不能帮助我直接指向数据数组。(除非对整个阵列应用了额外的循环,这是我要做的最坏的情况)


那么,在应用排序后,是否有人知道我可以使用任何指针/引用/变量来指向数据数组的对应行?谢谢。

最后,我找到了一种方法,即使在应用排序的情况下也可以获得数组的相应索引

此处演示:

通过像这样使用行映射

$scope.gridOptions.ngGrid.rowMap.indexOf(rowItem.rowIndex);
这没有文档记录,因此请注意,未来的修补程序/更新可能会影响此实现

更新: 通过进一步的研究,我发现带有multiSelect的selectedItems等于false可能也有同样的作用。
但是,如果您需要具有multiSelect:true的网格,则它的工作方式将不完全相同

谢谢你的回答这很有用。要在删除后将所选内容移动到下一行,可以这样做(单选)

//步骤01:记住当前选定的行索引:

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);});