Я действительно надеюсь узнать, есть ли в ag-Grid событие (checkboxClicked), которое запускает и выдает данные об узлах точно так же, как (rowClicked), и если нет, то как я мог бы реализовать такую вещь.
ВотОписание моей проблемы: Прямо сейчас у меня есть флажки на каждом ряду сетки.Пользователь должен иметь возможность щелкнуть либо по строке, либо по флажку, чтобы запустить функцию, чтобы получить доступ к данным за сеткой, но если мы используем (rowClicked), когда нажимаем флажок, это событие не срабатывает ... Поэтому я посмотрелв использование (rowSelected), но когда сетка готовится, она начнет срабатывать, когда мы строим наше состояние выбора для этой сетки.Есть событие checkboxClicked или что-то, что мне не нужно настраивать это?
Пока я сделал это, чтобы обойти мою проблему ... как вы можете видеть, проблема возникает только при настройкефлажки в том виде, в котором они выбраны, и включение функции отображения.Поэтому я отключаю это в течение первых 500 мс после запуска этих функций сборки.
Спасибо за любую помощь, которую вы можете предоставить!Компонент
спасибо:
buildSelectionStateFromId() {
this.buildSelectionStateFromIdIsRunning = true;
// we will have to loop over userIds array and select all the org admins
// input = orgVM.orgInfo.userIds && orgVM.orgInfo.
const admins = this.orgVM.orgAdmins;
this.agGrid.api.forEachNode(function (node) {
console.log('node: ', node);
admins.map(x => {
console.log('x: ', x);
if (node.data.id === x.id) {
console.log('node.data.id: ', node.data.id);
node.setSelected(true);
}
});
});
// output = actually checking the box based on the security ids in currentUser
this.buildingSelection();
}
toggleOnlySelectedRows(data) {
this.buildSelectionStateFromIdIsRunning = true;
this.toggleSelected = !this.toggleSelected;
console.log('this.toggleSelected: ', this.toggleSelected);
if (this.toggleSelected) {
let selectedRows;
const clone = [...(<any>this.agGrid.rowData)];
selectedRows = clone.filter((el) => this.getSelectedRows().includes(el));
this.agGrid.api.setRowData(selectedRows);
console.log('selectedRows: ', selectedRows);
this.buildSelectionStateFromId();
} else {
console.log('data: ', data);
this.agGrid.api.setRowData(data);
this.buildSelectionStateFromId();
}
this.buildingSelection();
}
buildingSelection() {
setTimeout(() => {
this.buildSelectionStateFromIdIsRunning = false;
}, 500);
}
mapClickToModel(rowClicked) {
console.log('rowClicked: ', rowClicked);
// *ag-Grid hint: if we use (rowSelected), it will start firing when we are building
// * our selection through any automated way like buildSelectionStateFromId();
// * if we use (rowClicked) when we click the checkbox mapClickToModel wont fire...
// * Another solution might be to not use their checkbox and just put our checkbox in a cell renderer?
// TODO: refactor this timing hack
if (this.buildSelectionStateFromIdIsRunning === false) {
// console.log('this.buildSelectionStateFromIdIsRunning: mpa click to model fired');
this.orgVM.orgUsers.map(x => {
// whenever a row is clicked I grab the id off it and see if it is equal to any on the orgUsers array
if (x.id === rowClicked.node.data.id) {
console.log('x.id: ', x.id);
// if it is then i check if the usertype is 1
if (x.userType === 1) {
// if it is then I change it to something else
x.userType = 0; // ! what do we change it to?
} else {
x.userType = 1;
}
}
});
}
}
шаблон:
<ag-grid-angular #agGrid (componentStateChanged)="onGridReady($event)"
(rowSelected)="mapClickToModel($event)" (click)="mapClickToModel($event)"
(gridReady)="onGridReady($event)" style="width: 100%; height: 84%;"
class="of-grid-theme" rowMultiSelectWithClick="true"
[context]="context" [frameworkComponents]="frameworkComponents"
[headerHeight]="headerHeight" [getContextMenuItems]="getContextMenuItems"
[enableSorting]="true" [enableFilter]="true" [multiSortKey]="multiSortKey"
[defaultColDef]="defaultColDef" [rowData]="rowData" [columnDefs]="columnDefs"
rowSelection="multiple" pagination="true" paginationAutoPageSize="true"
animateRows="true" [defaultColDef]="defaultColDef">
</ag-grid-angular>
Одним из лучших решений, о котором я подумал, было следующее: я мог бы сделать параметр mapClickToModel необязательным и запустить егона (щелкните), а затем проверьте, не определено ли оно, а затем, если оно не определено, я получаю доступ к getSelectedRows () и получаю данные узла таким образом ... НО я действительно просто хочу посмотреть, смогу ли я получить событие, которое дает мнеузел, который был только что выбран.