#angular #ag-grid #ag-grid-ng2 #ag-grid-angular
#angular #ag-grid #ag-grid-ng2 #ag-grid-angular
Вопрос:
Я использую ag-grid community edition в проекте angular. Требовалось включить встроенное редактирование на вкладке, это было достигнуто, но есть еще одно требование, которое заключается в том, что при переходе по вкладке и достижении последнего столбца и повторном нажатии клавиши tab должна создаваться пустая строка и также фокусироваться на 1-м элементе новой строки. Я могу передавать новые данные через сеточную функцию setRowData (данные).
Я попробовал startEditingCell () и setFocusedCell (), доступные в grid api. Они фокусируются на элементе, но курсор во входном элементе не появляется.
import {
Component, OnInit
} from '@angular/core';
import {GridOptions, StartEditingCellParams} from "ag-grid-community";
@Component({
selector: 'app-angular-grid',
templateUrl: './angular-grid.component.html',
styleUrls: ['./angular-grid.component.css']
})
export class AngularGridComponent implements OnInit {
gridOptions:GridOptions;
constructor() {
}
ngOnInit() {
this.initializeGridOption();
}
initializeGridOption() {
this.gridOptions = {
onGridReady: (params)=> {
params.api.sizeColumnsToFit();
},
rowData: this.rowData,
columnDefs: this.columnDefs,
rowSelection: 'multiple',
onCellEditingStopped: function (params) {
let rowIndex = params.rowIndex;
let rowDataLength = this.rowData.length;
let colId = params.column.getColId();
if (rowDataLength === rowIndex 1 amp;amp; colId === 'price') {
let data = {id: this.rowData.length 1, make: '', model: '', price: ''};
this.rowData.push(data);
params.api.setRowData(this.rowData);
setTimeout(() => {
params.api.startEditingCell({rowIndex: rowDataLength, colKey: 'make'});
params.api.setFocusedCell(rowDataLength, 'make');
});
}
}
};
}
columnDefs = [
{
headerName: '',
width: 40
},
{headerName: 'Make', field: 'make', editable: true},
{headerName: 'Model', field: 'model', editable: true},
{
headerName: 'Price',
field: 'price',
editable: true
}
];
rowData = [
{id: 1, make: 'Toyota', model: 'Celica', price: 35000},
{id: 2, make: 'Ford', model: 'Mondeo', price: 32000},
{id: 3, make: 'Porsche', model: 'Boxter', price: 72000}
];
}
Ответ №1:
Вам не нужно явно устанавливать фокус ячейки на setFocusedCell
.
Проверьте этот образец plunk, который я создал: Cell Editing
Доберитесь до последней ячейки и нажмите tab и обратите внимание, что input
уже сфокусировано.
setTimeout(() => {
params.api.startEditingCell({rowIndex: rowDataLength, colKey: 'make'});
//params.api.setFocusedCell(rowDataLength, 'make');
});
Комментарии:
1. Да, это работает, также мне пришлось переместить
editable=true
из определения столбца в определение столбца по умолчанию. Я не знаю причины, но это работает.2. Я заметил здесь, что он работает только на plunker. Вы пробовали это и на компьютере?
3. это работает. попробуйте воспроизвести его на plunk, если вы пропустили что-то еще
4. не удается выполнить на plunk, поскольку фокус порта просмотра plunk остается в окне. Я скопировал весь код и запустил его на компьютере, он не получает фокус на последней вкладке. Но когда я помещаю элемент button ниже директивы grid, он начинает фокусироваться на последнем столбце. Странно, но это работает, мне просто нужно найти какое-то обоснование, почему мне нужно поместить какой-то дополнительный элемент ниже сетки.