如何使Ag-Grid单元格文本(不是整个单元格)有点击事件
How to make Ag-Grid cell text (not entire cell) have a click event
每当用户单击特定单元格(在本例中为“名称”列)中的文本时,我都会尝试打开一个组件。我遇到的问题 运行 是 Ag-Grid 中没有任何方法(据我所知)允许这样做。我相信有一种方法可以为特定的单元格添加点击事件,但我试图让它只捕获点击单元格文本时的事件。有谁知道我怎样才能做到这一点?
我尝试了很多 Ag-Grid 方法,但是 none 有单元格文本点击事件。
this.gridOptions.api.setColumnDefs([{
headerName: "Name",
field: "Name"
},
{
headerName: "Description",
field: "Description"
},
{
headerName: "Actions",
cellRendererFramework: ActionsRoleComponent,
autoHeight: false,
cellClass: 'actions-button-cell d-flex align-items-center justify-content-center',
width: 80,
pinned: 'right',
suppressResize: true,
suppressFilter: true,
suppressSorting: true,
suppressMovable: true,
cellEditorFramework: ActionsRoleComponent
}
]);
this.gridOptions.api.setRowData(receivedJson);
this.gridOptions.api.sizeColumnsToFit();
在为 ag-Grid 自定义单元格渲染器时,您需要使用 Cell Renderer Componenta.
首先,在您的 component.html 上,包含 frameworkComponents
的输入绑定
<ag-grid-angular
#agGrid
style="width: 100%; height: 100%;"
id="myGrid"
class="ag-theme-balham"
[columnDefs]="columnDefs"
[frameworkComponents]="frameworkComponents"
(gridReady)="onGridReady($event)"
.
.
></ag-grid-angular>
在使用和生成 ag-grid 的主要组件上,您需要导入自定义单元格组件,为 frameworkComponents
定义 属性,然后提供值对于 cellRenderer
对于列定义中的特定列:
import { NameRenderer } from "./name-renderer.component";
this.columnDefs = [
{
headerName: "Name",
field: "name",
cellRenderer: "nameRenderer",
},
// other columns
]
this.frameworkComponents = {
nameRenderer: NameRenderer,
};
然后在您的自定义单元格渲染器组件 NameRenderer
上绑定 click
事件。我不确定您需要单元格的哪一部分是可点击的,但我假设您希望整个 name
来处理点击事件
import {Component} from "@angular/core";
import {ICellRendererAngularComp} from "ag-grid-angular";
@Component({
selector: 'name-cell',
template: `<span (click)="onClick($event)">{{ params.value }}</span>`
})
export class NameRenderer implements ICellRendererAngularComp {
// other parts of the component
onClick(event) {
console.log(event);
// handle the rest
}
}
不要忘记在 module.ts、
中包含自定义单元格渲染器组件
import { NameRenderer } from "./name-renderer.component";
@NgModule({
imports: [
AgGridModule.withComponents([NameRenderer])
// other imported stuff
],
declarations: [
NameRenderer,
// other components
],
bootstrap: [AppComponent]
})
我从官方 ag-grid 演示中分叉并创建了一个 demo。点击事件的处理可以参考cube-renderer.component.ts
每当用户单击特定单元格(在本例中为“名称”列)中的文本时,我都会尝试打开一个组件。我遇到的问题 运行 是 Ag-Grid 中没有任何方法(据我所知)允许这样做。我相信有一种方法可以为特定的单元格添加点击事件,但我试图让它只捕获点击单元格文本时的事件。有谁知道我怎样才能做到这一点?
我尝试了很多 Ag-Grid 方法,但是 none 有单元格文本点击事件。
this.gridOptions.api.setColumnDefs([{
headerName: "Name",
field: "Name"
},
{
headerName: "Description",
field: "Description"
},
{
headerName: "Actions",
cellRendererFramework: ActionsRoleComponent,
autoHeight: false,
cellClass: 'actions-button-cell d-flex align-items-center justify-content-center',
width: 80,
pinned: 'right',
suppressResize: true,
suppressFilter: true,
suppressSorting: true,
suppressMovable: true,
cellEditorFramework: ActionsRoleComponent
}
]);
this.gridOptions.api.setRowData(receivedJson);
this.gridOptions.api.sizeColumnsToFit();
在为 ag-Grid 自定义单元格渲染器时,您需要使用 Cell Renderer Componenta.
首先,在您的 component.html 上,包含 frameworkComponents
<ag-grid-angular
#agGrid
style="width: 100%; height: 100%;"
id="myGrid"
class="ag-theme-balham"
[columnDefs]="columnDefs"
[frameworkComponents]="frameworkComponents"
(gridReady)="onGridReady($event)"
.
.
></ag-grid-angular>
在使用和生成 ag-grid 的主要组件上,您需要导入自定义单元格组件,为 frameworkComponents
定义 属性,然后提供值对于 cellRenderer
对于列定义中的特定列:
import { NameRenderer } from "./name-renderer.component";
this.columnDefs = [
{
headerName: "Name",
field: "name",
cellRenderer: "nameRenderer",
},
// other columns
]
this.frameworkComponents = {
nameRenderer: NameRenderer,
};
然后在您的自定义单元格渲染器组件 NameRenderer
上绑定 click
事件。我不确定您需要单元格的哪一部分是可点击的,但我假设您希望整个 name
来处理点击事件
import {Component} from "@angular/core";
import {ICellRendererAngularComp} from "ag-grid-angular";
@Component({
selector: 'name-cell',
template: `<span (click)="onClick($event)">{{ params.value }}</span>`
})
export class NameRenderer implements ICellRendererAngularComp {
// other parts of the component
onClick(event) {
console.log(event);
// handle the rest
}
}
不要忘记在 module.ts、
中包含自定义单元格渲染器组件import { NameRenderer } from "./name-renderer.component";
@NgModule({
imports: [
AgGridModule.withComponents([NameRenderer])
// other imported stuff
],
declarations: [
NameRenderer,
// other components
],
bootstrap: [AppComponent]
})
我从官方 ag-grid 演示中分叉并创建了一个 demo。点击事件的处理可以参考cube-renderer.component.ts