ag-Grid是世界上最好的数据网格。
在前端框架层出不穷的今天,在大数据时代,数据表格的展示成为很多开发者和企业头疼的问题,很多网格框架看起来很好,但一旦用到企业开发中却发现其性能的不足,每个表格只能展示区区1000条左右的数据,如果有更多的数据需要展示就只能选择分页显示,这个对于很多场景是行不通的,比如我开发的某个项目,其每个功能都希望能一次性展示完所有的数据,最多的有1w多条,这个时候如果采用普通的表格,浏览器马上卡死无法使用。为了解决这个问题,我采用了ag-grid这个网格插件,问题马上就得到解决。废话不多说,下面给出demo源码,希望能帮助和我一样被表格性能、功能困扰的程序猿。欢迎大家访问blog.fundodoo了解更多。
index.html内容如下:
html, body { margin: 0; padding: 0; height: 100%; }
.main {
display: none;
}
.main.selected {
display: block;
}
table
table1
table2
table3
table4
table5
table6
table7
table8
table9
var lis = document.getElementsByClassName("tab-item");
var ps = document.getElementsByClassName("main");
for(var i = 0; i < lis.length;i++) {
lis[i].index = i;
lis[i].onclick = function () {
for(var i = 0; i < lis.length;i++) {
//replace:这个非常不好用,jquery
lis[i].classList.remove("active");
ps[i].classList.remove("selected");
}
this.classList.add("active");
ps[this.index].classList.add("selected");
}
}
var asyncData = function(){
var httpRequest = new XMLHttpRequest();
httpRequest.open('GET', 'http://172.16.7.39:16800/13000k');
httpRequest.send();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
var httpResult = JSON.parse(httpRequest.responseText);
gridOptions.api.setRowData(httpResult);
}
};
}
main.js内容如下
var columnDefs = [{headerName: "", colId: "rowNum",suppressResize:true,suppressMovable:true, valueGetter: function(params){return Number(params.node.id) + 1 ;}, width: 65, pinned: 'left'},
{
// column group 'Participant
headerName: 'Participant',
// marryChildren: true,
children: [
{
headerName: 'Name',
rowDrag: true,
field: 'Name',
width: 200,
editable: true,
enableRowGroup: true,
// enablePivot: true,
pinned: 'left',
filter: 'personFilter',
floatingFilterComponent: 'personFloatingFilterComponent',
checkboxSelection: function (params) {
// we put checkbox on the name if we are not doing grouping
return params.columnApi.getRowGroupColumns().length === 0;
},
headerCheckboxSelection: function (params) {
// we put checkbox on the name if we are not doing grouping
return params.columnApi.getRowGroupColumns().length === 0;
},
headerCheckboxSelectionFilteredOnly: true
},
{
headerName: "Language", field: "Language", width: 150, editable: true, filter: 'agSetColumnFilter',
cellEditor: 'agSelectCellEditor',
enableRowGroup: true,
enablePivot: true,
// rowGroupIndex: 0,
// pivotIndex: 0,
pinned: 'left',
cellEditorParams: {
values: ['English', 'Spanish', 'French', 'Portuguese', 'German',
'Swedish', 'Norwegian', 'Italian', 'Greek', 'Icelandic', 'Portuguese', 'Maltese']
},
// pinned: 'left',
headerTooltip: "Example tooltip for Language",
filterParams: {
selectAllOnMiniFilter: true,
newRowsAction: 'keep',
clearButton: true
}
},
{
headerName: "Country", field: "Country", width: 150, editable: true,
// pivotIndex: 1,
// rowGroupIndex: 1,
enableRowGroup: true,
pinned: 'left',
enablePivot: true,
cellEditor: 'agRichSelect',
cellEditorParams: {
values: ["Argentina", "Brazil", "Colombia", "France", "Germany", "Greece", "Iceland", "Ireland",
"Italy", "Malta", "Portugal", "Norway", "Peru", "Spain", "Sweden", "United Kingdom",
"Uruguay", "Venezuela", "Belgium", "Luxembourg"]
},
// pinned: 'left',
floatCell: true,
filterParams: {
// cellHeight: 20,
newRowsAction: 'keep',
selectAllOnMiniFilter: true,
clearButton: true
},
floatingFilterComponent: 'countryFloatingFilterComponent',
icons: {
sortAscending: '',
sortDescending: ''
}
}
]
},
{
// column group 'Game of Choice'
headerName: 'Game of Choice',
children: [
{
headerName: "Game Name", field: "GameName", width: 180, editable: true, filter: 'agSetColumnFilter',
tooltipField: 'game.name',
cellClass: function () {
return 'alphabet';
},
filterParams: {
selectAllOnMiniFilter: true,
newRowsAction: 'keep',
clearButton: true
},
enableRowGroup: true,
enablePivot: true,
// pinned: 'right',
// rowGroupIndex: 1,
icons: {
sortAscending: '',
sortDescending: ''
}
},
{
headerName: "Bought", field: "Bought", filter: 'agSetColumnFilter', editable: true, width: 150,
// pinned: 'right',
// rowGroupIndex: 2,
// pivotIndex: 1,
enableRowGroup: true,
enablePivot: true,
enableValue: true,cellStyle: { "text-align": "center" },
floatCell: true,
filterParams: {
selectAllOnMiniFilter: true,
newRowsAction: 'keep',
clearButton: true
}
}
]
},
{
// column group 'Performance'
headerName: 'Performance',
groupId: 'performance',
children: [
{
headerName: "Bank Balance", field: "BankBalance", width: 180, editable: true,
type: 'numericColumn',
enableValue: true,
// colId: 'sf',
// valueGetter: '55',
// aggFunc: 'sum',
icons: {
sortAscending: '',
sortDescending: ''
}
},
{
headerName: "Extra Info 1",field:"Apr", columnGroupShow: 'open', width: 150, editable: false,
suppressSorting: true, suppressMenu: true, cellStyle: { "text-align": "right" }
},
{
headerName: "Extra Info 2",field:"Aug", columnGroupShow: 'open', width: 150, editable: false,
suppressSorting: true, suppressMenu: true, cellStyle: { "text-align": "left" }
}
]
},
{
headerName: "Rating", field: "Rating", width: 120, editable: true,
floatCell: true,
enablePivot: true,
enableValue: true
},
{
headerName: "Total Winnings", field: "TotalWinnings", filter: 'agNumberColumnFilter', type: 'numericColumn',
editable: true, width: 170,
enableValue: true,
icons: {
sortAscending: '',
sortDescending: ''
}
},
{
headerName: "Dec", field: "Dec", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "Feb", field: "Feb", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "Jan", field: "Jan", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "Jul", field: "Jul", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "Jun", field: "Jun", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "Mar", field: "Mar", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "May", field: "May", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "Nov", field: "Nov", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "Oct", field: "Oct", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
,
{
headerName: "Sep", field: "Sep", width: 120, editable: false,
floatCell: true,
enablePivot: true,
enableValue: true
}
];
var gridOptions = {
columnDefs: columnDefs,
rowData:[],
enableFilter: true,
enableSorting: true,
showToolPanel: true,
rowSelection: 'multiple',
enableColResize:true,
pinnedTopRowData: [
],
pinnedBottomRowData: [
]
};
var gridOptions1 = {
columnDefs: columnDefs,
enableFilter: true,
enableSorting: true,
showToolPanel: true,
rowSelection: 'multiple',
pinnedTopRowData: [
],<...