单击一行时 AG-Grid 的默认行为是使其成为选择。我想知道是否可以启用此选择模式,但仅使其包含用户实际单击复选框时的行而不是整行。
这样做的原因是我想保留单击该行上的任何位置(复选框除外)以显示有关该行的详细信息。选择复选框应该是将其包含为选定项目的唯一方法。
是的,您可以在 Ag-grid 中做到这一点。
请参阅官方文档页面此处。
<iframe src="https://codesandbox.io/embed/ag-grid-packages-wr7jw5?fontsize=14&hidenavigation=1&theme=dark"
style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;"
title="ag-grid-packages"
allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking"
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
></iframe>
app.component.ts:
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
import {
ColDef,
FirstDataRenderedEvent,
GridReadyEvent,
IRowNode,
IsRowSelectable,
} from 'ag-grid-community';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
import { IOlympicData } from './interfaces';
@Component({
selector: 'my-app',
template: `<ag-grid-angular
style="width: 100%; height: 100%;"
class="ag-theme-alpine"
[columnDefs]="columnDefs"
[defaultColDef]="defaultColDef"
[rowSelection]="rowSelection"
[suppressRowClickSelection]="true"
[isRowSelectable]="isRowSelectable"
[rowData]="rowData"
(firstDataRendered)="onFirstDataRendered($event)"
(gridReady)="onGridReady($event)"
></ag-grid-angular>`,
})
export class AppComponent {
public columnDefs: ColDef[] = [
{
field: 'athlete',
headerCheckboxSelection: true,
checkboxSelection: true,
showDisabledCheckboxes: true,
},
{ field: 'sport' },
{ field: 'year', maxWidth: 120 },
];
public defaultColDef: ColDef = {
flex: 1,
minWidth: 100,
};
public rowSelection: 'single' | 'multiple' = 'multiple';
public isRowSelectable: IsRowSelectable = (
params: IRowNode<IOlympicData>
) => {
return !!params.data && params.data.year === 2012;
};
public rowData!: IOlympicData[];
constructor(private http: HttpClient) {}
onFirstDataRendered(params: FirstDataRenderedEvent<IOlympicData>) {
const nodesToSelect: IRowNode[] = [];
params.api.forEachNode((node: IRowNode) => {
if (node.data && node.data.year === 2012) {
nodesToSelect.push(node);
}
});
params.api.setNodesSelected({ nodes: nodesToSelect, newValue: true });
}
onGridReady(params: GridReadyEvent<IOlympicData>) {
this.http
.get<IOlympicData[]>(
'https://www.ag-grid.com/example-assets/small-olympic-winners.json'
)
.subscribe((data) => (this.rowData = data));
}
}