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
重现:
- select 鼠标左键点击第一行
- 使用 ctrl + end 滚动到底部行
- select 表示 'Select me...' 的行使用 shift + ← click
- 预期:行直到 'Select me...' 得到 selected
- 观察到:额外的行得到 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');
}
}
查看我的 plunker:link
var app = angular.module('app', []);
// some stupid error won't let me paste the whole code, please check plunker
重现:
- select 鼠标左键点击第一行
- 使用 ctrl + end 滚动到底部行
- select 表示 'Select me...' 的行使用 shift + ← click
- 预期:行直到 'Select me...' 得到 selected
- 观察到:额外的行得到 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');
}
}