Я устанавливаю выделение моего ngGrid из JavaScript, вызывая gridOptions.selectItem()
. У меня установлено значение multiSelect равным false, поэтому выбирается только одна строка. Я бы хотел, чтобы ngGrid автоматически прокручивал, чтобы показать вновь выбранную строку, но я не знаю, как это сделать: может ли кто-нибудь помочь, пожалуйста?
В связанной теме: могу ли я отключить выбор строки щелчком мыши? Если да, то как?
Отредактировано для добавления
Я также хотел бы отключить клавиатурную навигацию выбранной строки, если это возможно.
Что работало:
Ответ AardVark71 работал. Я обнаружил, что ngGrid определяет свойство ngGrid
в переменной gridOptions
, которая содержит ссылку на сам объект сетки. Необходимые функции отображаются через свойства этого объекта:
$scope.gridOptions.selectItem(itemNumber, true);
$scope.gridOptions.ngGrid.$viewport.scrollTop(Math.max(0, (itemNumber - 6))*$scope.gridOptions.ngGrid.config.rowHeight);
Моя сетка фиксирована на высоте 13 строк, и моя логика пытается сделать выбранную строку отображаемой в середине сетки.
Я по-прежнему хотел бы отключить изменения мыши и клавиатуры в выборе, если это возможно.
Что также работает:
Это, вероятно, ближе к пути Angular и достигает того же конца:
// This $watch scrolls the ngGrid to show a newly-selected row as close to the middle row as possible
$scope.$watch('gridOptions.ngGrid.config.selectedItems', function (newValue, oldValue, scope) {
if (newValue != oldValue && newValue.length > 0) {
var rowIndex = scope.gridOptions.ngGrid.data.indexOf(newValue[0]);
scope.gridOptions.ngGrid.$viewport.scrollTop(Math.max(0, (rowIndex - 6))*scope.gridOptions.ngGrid.config.rowHeight);
}
}, true);
хотя эффект, когда строка выбирается нажатием на нее, может немного расстраиваться.