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 |
|---|---|---|
| 列分組,含彙總值和合計列 | 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 和純 JavaScript | Angular 22 和 React 19 |
選項對照
| AG Grid | Needless UI 資料表格 |
|---|---|
<ag-grid-angular>、模組註冊、LicenseManager.setLicenseKey() | <nui-grid>;不需要註冊,也不需要金鑰 |
rowData、columnDefs | [(rows)]、[columns] |
field、headerName | id、header |
valueGetter、valueFormatter、cellDataType | value、format(Intl 選項或函式)、type |
cellRenderer | nuiGridCell 範本 |
pinned: 'left'、hide | pinned: 'start'、hidden |
欄的 rowGroup、groupDefaultExpanded | [(groupBy)],也就是由欄 id 組成的清單。群組預設為展開;[(collapsed)] 可將群組收合。 |
aggFunc、grandTotalRow | aggregate、totals |
treeData 搭配 treeDataChildrenField | children: (row) => row.children |
masterDetail、detailCellRenderer | nuiGridDetail 範本,以及 [(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、enableRtl | labels;由右至左的版面取決於頁面的 dir |
依國家分組訂單的兩種寫法
需求是:訂單依國家分組,每個國家各有一個合計,所有訂單另有一個總計;此外還要支援 Excel 匯出、快速搜尋和多選。使用 AG Grid 36 時,分組、合計和 Excel 匯出都需要 Enterprise 版:
使用 Needless UI 資料表格:
有幾點做法不同。選取狀態存放的是 key,也就是列的 id,因此資料更新後選取仍會保留;需要列本身時,再用這些 key 找回對應的列。群組預設為展開。群組的標籤會顯示在第一個可見的欄中,而搜尋只會讀取可見的欄,所以如果希望搜尋也能比對分組所依據的欄,就要讓該欄保持顯示。此外,exportXlsx() 會傳回檔案,而不是直接下載:檔案只有一個工作表,內含篩選和排序後的列,不含群組列。
如果需要尚未支援的功能
如果你的應用程式依賴樞紐分析、圖表、剪貼簿和範圍選取、伺服器端分組或欄標題分組,Needless UI 資料表格目前還無法取代 AG Grid。歡迎針對你需要的功能提出 issue。至於其他內容,資料表格頁面列出了每個輸入屬性、輸出屬性和範例。