2014-02-05 45 views
1

我發現如果應用排序,行Id將不再映射到數據數組的索引。angular ng-grid:rowItem.rowIndex在排序後沒有映射到數據數組的索引

簡單的演示在這裏: http://plnkr.co/edit/irVXdjAoCvAKPxQ1uD4P?p=preview

這是預期的行爲?或者,這是一個錯誤?

我知道有row.entity可以獲取整行信息,但它並沒有幫助我直接指向數據數組。 (除非應用整個陣列的額外循環,這是最糟糕的情況下我會這樣做)

所以,有沒有人知道是否有任何指針/參考/變量我可以用來指向相應的數據行排序後的數組應用?謝謝。

回答

3

最後,我找到了即使在應用排序時也能得到相應數組索引的方法。

演示在這裏: http://plnkr.co/edit/irVXdjAoCvAKPxQ1uD4P?p=preview

通過使用rowMap這樣,

$scope.gridOptions.ngGrid.rowMap.indexOf(rowItem.rowIndex); 

這是沒有記錄,所以要小心,未來的補丁/升級可能會影響此實現。

更新: 隨着進一步的研究,我發現selectedSelection與multiSelect等於false可能會達到同樣的目的。 但是,如果您需要具有multiSelect:true的網格,它將無法完全相同。

0

感謝您的回答,這是非常有用的。移動選擇到下一行刪除後,你可以做這樣的(單選擇)

//步驟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);});