agGrid 是個非常強大的表格套件 在撰寫上 大部份都是使用配置的概念做設定
在一開始 agGrid 分別做了 Grid Interface 與 Column Interface 兩大接口 所有的設定就從這兩大接口開始…
以下將會以 Angular 的寫法來介紹
HTML 部份
<ag-grid-angular
style="width: 100%; height: 500px;"
class="ag-theme-balham"
[rowData]="rowData"
[columnDefs]="columnDefs"
[gridOptions]="gridOptions"
(gridReady)="onGridReady($event)"
>
</ag-grid-angular>
主要由 欄位名稱 (columnDefs) 與 資料列 (rowData) 組成
- [rowData]=“rowData”
- [columnDefs]=“columnDefs” … 等 表格載入設定資料
接著由 gridOptions
載入各種表格裡的各種設定
- (gridReady)=“onGridReady($event)“
當表格載入完成後 可接收 agGrid event 裡的 API 進而設定表格 Grid API
JS 部份
gridOptions: GridOptions = {
// 預設所有 column 配置
defaultColDef: {
headerValueGetter: (obj) => { return obj; } //設定標題預設值
}
// 欄位分類
columnTypes: {
"nonEditableColumn": {editable: false},
}
};
// 針對各個 column 做配置
columnDefs: [
{
field: 'make', // 主要用來對應 rowdata 的名字
headerName: 'make',
width : 100,
type: 'nonEditableColumn',
cellRenderer: '',
...
},
{ field: 'make' },
{ field: 'price' },
];
// 對應到 rowData
rowData = [
{ make: 'Toyota', model: 'Celica', price: 35000 },
{ make: 'Ford', model: 'Mondeo', price: 32000 },
{ make: 'Porsche', model: 'Boxter', price: 72000 }
];
Grid 屬性配置 ( Grid Properties )
GridOptions
用於 agGrid 初始預設設定
Grid API
用來更新 agGrid 初始設定
columnDefs
更多的 columnDefs 可觀看 GIT 原始碼 做挑選
踩雷經驗:
- colId: 如果沒設會自動產生來確保唯一值,以比重來說 應該就像是 css 裡的
!important
吧,加上它之後 會將 column 提到最前面雷點:在編輯欄位的時後若沒有設定,在欄位異動後 colId 則會再名字後面加上
_1
,若是用 colID 來取值的話 就會很容易噴錯,後來我就使用 field 來取值了 ㄏㄏ
https://www.ag-grid.com/javascript-grid-column-definitions/#column-ids
columnTypes
可對每個 column 做分類,分群組 比如 可編輯的 column 一組,不可編輯的一組
對應方式寫法如下
columnDefs: [
{
headerName: 'Make',
field: 'make',
type: 'nonEditableColumn',
},
{
headerName: 'Model',
field: 'model',
type: ['nonEditableColumn','numberColumn'],
},
];
columnTypes: {
nonEditableColumn: { editable: false },
numberColumn: {
width: 130,
filter: 'agTextColumnFilter',
},
}
https://www.ag-grid.com/javascript-grid-column-definitions/#default-column-definitions
Grid API
https://www.ag-grid.com/javascript-grid-api/
表格讀取完成後 可用來做後續的調整設定 如:更新資料,新增欄或列
Grid Events
了解 agGrid 的層級架構 https://www.ag-grid.com/javascript-grid-events/#properties-and-hierarchy
才能知道事件需用在哪個地方 哪種設定的 api 會對應怎麼樣名稱的事件
在每個 cell(單個小格) 裡 有時後需要做些各別的設定 就會使用到
主要是設定在 GridOptions
裡,比如 欄位的編輯,呈現方式等
就有待慢慢去挖掘了。
附上 Demo 頁
後記 在寫這篇的時後 發現 agGrid 已經更新到 23 版了 多了許多 css 的樣式可以挑選 也可以自己定義樣式 可至 https://www.ag-grid.com/javascript-grid-themes-provided/ 觀看介紹