我的 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),并在列定义一侧使用它:

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

相关推荐
Hashan20 小时前
Elpis:抽离业务代码,发布NPM包
前端·javascript·vue.js
quikai198120 小时前
python练习第六组
java·前端·python
用户479492835691520 小时前
0.1加0.2为什么不等于0.3-答不上来的都挂了
前端·javascript·面试
rit843249920 小时前
C#实现的远程控制系统
前端·javascript·c#
南山安20 小时前
React学习:Vite+React 基础架构分析
javascript·react.js·面试
诺斯贝克20 小时前
Unable to create converter for xxx.NetworkResponse<Auth> for method AuthService
前端·后端
listhi52020 小时前
针对燃油运输和车辆调度问题的蚁群算法MATLAB实现
前端·算法·matlab
渔_20 小时前
uni-app 页面传参总丢值?3 种方法稳如狗!
前端
快被玩坏了20 小时前
二次封装了个复杂的el-table表格
前端
用户938169125536020 小时前
在TypeScript中,可选属性(?)与null类型的区别
前端