AG Grid 的行分组、聚合、树形数据、主从表和 Excel 导出都属于 Enterprise 版功能:在生产环境中使用需要商业许可证;没有密钥时,表格会显示水印,并在控制台输出一条错误。Needless UI 数据表格在 MIT 许可证下提供带合计的分组、树形数据、行详情和 .xlsx 导出。本指南介绍如何把 Angular 应用从前者迁移到后者:哪些可以直接沿用,哪些不行,以及代码要怎么改。

文中使用 AG Grid 36 的名称。AG Grid 36 支持 Angular 20 到 22;Needless UI 需要 Angular 22。

功能对比

AG Grid 与 Needless UI 数据表格
功能AG GridNeedless UI
行分组,带聚合值和合计行Enterprise支持:可多级分组,聚合方式包括总和、平均值、最小值、最大值、计数或自定义函数
树形数据Enterprise支持,由嵌套的行构成
行下方的详情(master/detail)Enterprise支持:行下方可放任意模板,包括另一个表格
Excel 导出Enterprise:样式、多个工作表、图片和公式支持:单个工作表,单元格保留数据类型,带数字格式,表头冻结并可筛选
带列选择器的列菜单Enterprise支持:可对每列排序、筛选、固定、移动、自动调整列宽和隐藏,也能一次显示或隐藏所有列
多列排序、快速搜索、分页、行选择Community支持
列筛选Community:最多两个条件,以 AND 或 OR 连接每列一个条件
集合筛选、多重筛选和高级筛选Enterprise部分支持:勾选列表来自列的选项,而不是数据中的值
调整列宽、移动、固定和隐藏列,并保存列状态Community支持
虚拟滚动Community:行和列仅限行
单元格编辑Community;部分编辑器属于 Enterprise支持,按列类型编辑并带校验;不支持自定义编辑器,也不支持撤销
数据透视、集成图表Enterprise不支持
剪贴板、单元格区域选择、右键菜单、状态栏、侧边栏Enterprise不支持
服务器数据服务器端行模型:Enterprise;分块加载:Community由你的服务器分页提供,排序、筛选和搜索也由服务器完成;不支持服务器端分组
表头分组、行拖动、固定行Community不支持
框架React、Angular 20 到 22、Vue 和纯 JavaScriptAngular 22 和 React 19

选项对照

AG Grid 的选项及其在 Needless UI 中的对应项
AG GridNeedless UI 数据表格
<ag-grid-angular>、模块注册、LicenseManager.setLicenseKey()<nui-grid>;无需注册,也不需要密钥
rowData、columnDefs[(rows)]、[columns]
field、headerNameid、header
valueGetter、valueFormatter、cellDataTypevalue、format(Intl 选项或函数)、type
cellRenderernuiGridCell 模板
pinned: 'left'、hidepinned: 'start'、hidden
列的 rowGroup、groupDefaultExpanded[(groupBy)],即由列 id 组成的列表。分组默认展开;[(collapsed)] 用于折叠分组。
aggFunc、grandTotalRowaggregate、totals
treeData 配合 treeDataChildrenFieldchildren: (row) => row.children
masterDetail、detailCellRenderernuiGridDetail 模板,以及 [(details)]
quickFilterText[(search)]
rowSelection、getSelectedRows()selection,以及 [(selected)]:所选行的 key
pagination、paginationPageSize[(pageSize)]、[(page)]、pageSizes
getColumnState()、applyColumnState()[(columnState)]
exportDataAsExcel()、exportDataAsCsv()exportXlsx() 返回 Blob,exportCsv() 返回文本
cellValueChanged、rowDoubleClicked(cellEdit)、(rowActivate)
rowModelType: 'serverSide'mode="server"、total、(queryChange)
localeText、enableRtllabels;从右到左的布局由页面的 dir 决定

按国家分组订单的两种写法

任务如下:订单按国家分组,每个国家有一个合计,所有订单还有一个总计;此外还要支持 Excel 导出、快速搜索和多选。使用 AG Grid 36 时,分组、合计和 Excel 导出都需要 Enterprise 版:

使用 Needless UI 数据表格:

有几点不同。选择保存的是 key,也就是行的 id,因此数据更新后选择依然保留;需要行本身时,再根据 key 找回对应的行。分组默认展开。分组的标签显示在第一个可见列中,而搜索只读取可见列,所以如果希望搜索也能匹配分组所依据的列,就要让这一列保持显示。另外,exportXlsx() 会返回文件,而不是直接下载:文件只有一个工作表,包含筛选和排序后的行,不含分组行。

如果需要尚未支持的功能

如果你的应用依赖数据透视、图表、剪贴板和区域选择、服务器端分组或表头分组,Needless UI 数据表格目前还无法取代 AG Grid。欢迎就你需要的功能提交 issue。至于其他内容,数据表格页面列出了每个输入属性、输出属性和示例。