ng grid shift select bug selects 附加行

ng grid shift select bug selects additional rows

查看我的 plunker:link

var app = angular.module('app', []);
// some stupid error won't let me paste the whole code, please check plunker

重现:

  1. select 鼠标左键点击第一行
  2. 使用 ctrl + end 滚动到底部行
  3. select 表示 'Select me...' 的行使用 shift + click
  4. 预期:行直到 'Select me...' 得到 selected
  5. 观察到:额外的行得到 selected

注意:滚动时,额外的行会再次删除select。

我添加了这样的东西,它起作用了:

beforeSelectionChange: function() {
    var grid = angular.element('.ngGrid');
    grid.data('alreadySelectedItems', grid.scope().selectedItems);
    return true;
},
afterSelectionChange: function (rowItem) {
    if (rowItem.selected === true) {
    } else if (rowItem.selected === false) {
    } else if (rowItem.length > 0) {
        var selectedIds = [],
            grid = angular.element('.ngGrid'),
            renderedRows = grid.scope().renderedRows,
            alreadySelectedItems = grid.data('alreadySelectedItems') || [];
        angular.forEach(rowItem, function (row) {
            if (row.selected === true) {
                selectedIds.push(row.entity.Id);
            }
        });
        angular.forEach(renderedRows, function (row) {
            if (selectedIds.indexOf(row.entity.Id) === -1 && alreadySelectedItems.indexOf(row.entity) === -1) {
                row.selected = false;
            }
        });
        grid.removeData('alreadySelectedItems');
    }
}