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

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

相关推荐
换日线°1 小时前
前端炫酷展开效果
前端·javascript·vue
夏幻灵2 小时前
过来人的经验-前端学习路线
前端
CappuccinoRose2 小时前
React框架学习文档(七)
开发语言·前端·javascript·react.js·前端框架·reactjs·react router
FFF-X2 小时前
前端字符串模糊匹配实现:精准匹配 + Levenshtein 编辑距离兜底
前端
Hi_kenyon2 小时前
Ref和Reactive都是什么时候使用?
前端·javascript·vue.js
止观止3 小时前
深入理解 interface vs type:终结之争
前端·typescript
css趣多多3 小时前
vue环境变量
前端
RFCEO3 小时前
前端编程 课程十五、:CSS核心基础3:文字+段落样式
前端·css·文字+段落样式·css文本样式·美化页面文本内容·演示动画说明·单行文字垂直居中技
摇滚侠3 小时前
【程序员入门系列】jQuery 零基础入门到精通!Jquery 选择器 API
前端·javascript·jquery
im_AMBER3 小时前
Leetcode 111 两数相加
javascript·笔记·学习·算法·leetcode