ng-grid导出到CSV插件-如何下载所有数据,即使页面
ng-grid export to CSV plugin -- how to download all data even if paged
嗨,我正在使用angular的ng-grid来显示大约1000行数据。用户可以一次查看实际表中的10行、20行或100行数据,但无论他们一次查看多少数据,我都希望他们能够下载包含所有1000行的CSV文件。
是否有办法做到这一点与当前的插件?我已经挣扎了一段时间了,因为插件总是去实际的ng-grid获取数据,以便从中创建CSV。
ng-grid plug in:
ngGridCsvExportPlugin = function(opts) {
var self = this;
self.grid = null;
self.scope = null;
self.init = function(scope, grid, services) {
self.grid = grid;
self.scope = scope;
function showDs() {
var keys = [];
for (var f in grid.config.columnDefs) { if (grid.config.columnDefs[f].field) { keys.push(grid.config.columnDefs[f].field); }}
var csvData = '';
function csvStringify(str) {
if (str == null) return ''; // we want to catch anything null-ish, hence just == not ===
if (typeof(str) === 'number') return '' + str;
if (typeof(str) === 'boolean') return (str ? 'TRUE' : 'FALSE') ;
if (typeof(str) === 'string') return str.replace(/"/g,'""');
return JSON.stringify(str).replace(/"/g,'""');
}
function swapLastCommaForNewline(str) {
var newStr = str.substr(0,str.length - 1);
return newStr + "'n";
}
for (var k in keys) {
csvData += '"' + csvStringify(keys[k]) + '",';
}
csvData = swapLastCommaForNewline(csvData);
var gridData = grid.data;
for (var gridRow in gridData) {
for ( k in keys) {
var curCellRaw;
if (opts != null && opts.columnOverrides != null && opts.columnOverrides[keys[k]] != null) {
curCellRaw = opts.columnOverrides[keys[k]](gridData[gridRow][keys[k]]);
} else {
curCellRaw = gridData[gridRow][keys[k]];
}
csvData += '"' + csvStringify(curCellRaw) + '",';
}
csvData = swapLastCommaForNewline(csvData);
}
var fp = grid.$root.find(".ngFooterPanel");
var csvDataLinkPrevious = grid.$root.find('.ngFooterPanel .csv-data-link-span');
if (csvDataLinkPrevious != null) {csvDataLinkPrevious.remove() ; }
var link = "data:text/csv;charset=UTF-8," + encodeURIComponent(csvData);
var csvDataLinkHtml = "<span class='"csv-data-link-span'">";
csvDataLinkHtml += "<br><a class='"btn hidden btn-primary exportTable2CSV'" href=" + link + " download='"Export.csv'">CSV Export</a></br></span>" ;
fp.append(csvDataLinkHtml);
scope.$emit("exportTable2CSVLinkReady", link);
}
setTimeout(showDs, 0);
scope.catHashKeys = function() {
showDs();
hash = '';
for (idx in scope.renderedRows) { hash += scope.renderedRows[idx].$$hashKey; }
return hash;
};
scope.$watch('catHashKeys()', showDs);
};
};
你已经有了所有的数据,也许你可以使用ng-csv导出csv文件
下面是一个例子。sfiddle
html:<h2>Export {{sample}}</h2>
<div>
<button type="button" ng-csv="getArray" filename="test.csv">Export</button>
</div>
javascript: angular.module('csv', ['ngCsv']);
function Main($scope) {
$scope.sample = "Sample";
$scope.getArray = [{a: 1, b:2}, {a:3, b:4}];
}
- 根据你的解释,不清楚什么是未定义的…您是否尝试过通过范围而不是网格访问数据?
正如您可能已经观察到的那样,没有这样的钩子/函数将一次导出所有数据,所以我建议让用户更改页面选择以仅在启用CSV导出选项之后显示所有记录?
相关文章:
- 如何在Edge中下载图像/png数据URI
- 下载使用POST数据动态生成的文件
- 将图像下载为数据url时出错
- 使用javascript|IE11下载base64数据
- 如何将CSV数据从变量下载到CSV文件
- Interent Explorer中的数据URI文件下载
- 将数据库中的数据转换为可下载的PDF文件
- 使用节点下载高图表数据,但不在浏览器中显示
- 如何创建和下载PDF和docx格式的文件,该文件将从AngularJS中的表中的数据创建
- 数据切换选项卡不下载传单地图
- 使用Horseman和PhantomJS下载wav文件,数据质量下降
- 如何在严格模式下将附件下载为二进制数据
- 将二进制数据保存在浏览器中,而不会在下载时进行 UTF8 编码
- 在Chrome中下载后访问文件数据..
- 将 JS 变量数据发送到可下载页面
- 如何在 Angular 表中下载 xml 数据
- 设置在 Javascript 数据模型中已有的数据下载
- 使用数据 URI 将多个文件下载到 Zip 文件中 Javascript
- ExtJS 4.2 将网格数据导出到可下载的 CSV 文件
- 使用javascript将二进制数据下载到文件中