以下是如何在 Angular 中创建 agGrid 单元格渲染器以将您的列之一绑定到复选框。
这个答案很大程度上基于user2010955上面的答案的出色答案,但有更多解释,并与最新版本的 agGrid 和 Angular 保持同步(在添加之前,我使用他的代码收到错误以下更改)。
是的,我知道这个问题是关于 agGrid 的React版本的,但我敢肯定,我不会是唯一一个绝望地偶然发现这个 StackOverflow 网页并试图找到解决这个问题的 Angular的Angular开发人员。
(顺便说一句,我不敢相信现在是 2020 年,Angular 的 agGrid没有默认包含复选框渲染器。说真的?!!)
首先,您需要定义一个渲染器组件:
import { Component } from '@angular/core';
import { ICellRendererAngularComp } from 'ag-grid-angular';
import { ICellRendererParams } from 'ag-grid-community';
@Component({
selector: 'checkbox-cell',
template: `<input type="checkbox" [checked]="params.value" (change)="onChange($event)">`
})
export class CheckboxCellRenderer implements ICellRendererAngularComp {
public params: ICellRendererParams;
constructor() { }
agInit(params: ICellRendererParams): void {
this.params = params;
}
public onChange(event) {
this.params.data[this.params.colDef.field] = event.currentTarget.checked;
}
refresh(params: ICellRendererParams): boolean {
return true;
}
}
接下来,你需要告诉你的@NgModule:
import { CheckboxCellRenderer } from './cellRenderers/CheckboxCellRenderer';
. . .
@NgModule({
declarations: [
AppComponent,
CheckboxCellRenderer
],
imports: [
BrowserModule,
AgGridModule.withComponents([CheckboxCellRenderer])
],
providers: [],
bootstrap: [AppComponent]
})
在显示 agGrid 的组件中,您需要导入渲染器:
import { CheckboxCellRenderer } from './cellRenderers/CheckboxCellRenderer';
让我们为我们的网格定义一个新的列,其中一些将使用这个新的渲染器:
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
@ViewChild('exampleGrid', {static: false}) agGrid: AgGridAngular;
columnDefs = [
{ headerName: 'Last name', field: 'lastName', editable: true },
{ headerName: 'First name', field: 'firstName', editable: true },
{ headerName: 'Subscribed', field: 'subscribed', cellRenderer: 'checkboxCellRenderer' },
{ headerName: 'Is overweight', field: 'overweight', cellRenderer: 'checkboxCellRenderer' }
];
frameworkComponents = {
checkboxCellRenderer: CheckboxCellRenderer
}
}
现在,当您创建 agGrid 时,您需要告诉它您正在使用的自制框架组件:
<ag-grid-angular #exampleGrid
style="height: 400px;"
class="ag-theme-material"
[rowData]="rowData"
[columnDefs]="columnDefs"
[frameworkComponents]="frameworkComponents" >
</ag-grid-angular>
呸!
是的……我花了一段时间才弄清楚如何让所有的部分组合在一起。agGrid 自己的网站确实应该包含这样的示例...