我的 Angular 总结:为 AgGridAngular 自定义单元格组件创建基类

ag-grid-angular 是一个在 Angular 中展示数据表格的强大库。

以下是来自 ag-grid-angular 官网 的一段代码,关于自定义属性(custom props)的使用:

但我并没有按照这种方式来使用它。接下来我会展示我在创建自定义单元格组件时的做法。


创建一个基类(Base Class)

首先,我会在另一个文件中创建一个抽象类,用于消除三个重复的 onClick 实现。例如:

ts 复制代码
@Component({
  template: ``,
})
export abstract class CellRendererBaseComponent<
  TParams extends ICellRendererParams = ICellRendererParams
> implements ICellRendererAngularComp
{
  protected params!: TParams;

  agInit(params: TParams): void {
    this.params = params;
  }

  refresh(params: TParams) {
    return false; // 默认可设为 true,视需求而定
  }
}

然后,实际的自定义组件代码如下:

ts 复制代码
import { ChangeDetectionStrategy, Component } from "@angular/core";
import type { ICellRendererAngularComp } from "ag-grid-angular";
import type { ICellRendererParams } from "ag-grid-community";

interface CustomButtonParams extends ICellRendererParams {
  onClick: () => void;
}

@Component({
  standalone: true,
  changeDetection: ChangeDetectionStrategy.OnPush,
  template: `<button (click)="params.onClick()">Launch!</button>`,
})
export class CustomButtonComponent extends CellRendererBaseComponent<CustomButtonParams> {}

如果还有另一个自定义组件,比如 CustomButton2Component,你只需要继承 CellRendererBaseComponent,并可选地声明自定义参数类型即可。

无需再重复定义参数类型、赋值逻辑,也不用重复实现类似的 agInitrefresh 方法。


导出自定义参数类型

顺便提一下,我还会导出自定义参数类型(如上面例子中的 CustomButtonParams),并在列定义一侧使用它:

这样,当类型不匹配时,你会立刻看到类型错误提示,提升类型安全性与开发体验。

相关推荐
mCell10 分钟前
从 TodoList 到 Microsoft To Do:全栈工程师到底要管什么?
前端·编程语言·全栈
阳光是sunny12 分钟前
LangGraph实战教程:状态管理与`graph.invoke`入参深度解析
前端·人工智能·后端
神奇小汤圆24 分钟前
深入解析 Flink Kafka Connector:原理、配置与最佳实践
前端·后端
科技之门26 分钟前
百公里管网漏损分级定位实战方案2026
前端·人工智能·算法
xyphf_和派孔明1 小时前
企业级微前端项目完整创建步骤,第三步:配置 Vue 子应用
前端·javascript
自强的小白1 小时前
条件查询或查询全部时时前端请求数据等时间格式
前端
阳光是sunny1 小时前
LangGraph实战教程:一文搞懂图的状态(State)管理
前端·人工智能·后端
whyfail1 小时前
前端学 Spring Boot(5):从“你是谁”到“服务真的上线了”
前端·spring boot·后端
程序员黑豆2 小时前
鸿蒙开发:RelativeContainer相对布局组件实战——实现5个文本组件对齐
前端·华为·harmonyos
环境栈笔记2 小时前
高性价比指纹浏览器推荐与选型:如何对照价格和实际可用功能筛选候选
前端·人工智能·后端·自动化