我正在尝试使用ng-csv来允许用户通过单击按钮来下载.csv文件。这些信息存储在Firebase中,我创建了一个函数,可以将Firebase中所需的信息作为数组返回。但是,我认为问题是在从Firebase提取信息并加载信息之前单击按钮文件时,因此.csv文件始终为空。有没有解决的办法?这是我的main.js应用程序中的代码:
this.export = function() {
var results = fireFactory.getResults() //code that returns the array of objects
results.$loaded().then(function(array) {
var test= [];
test.push(array[0]);
test.push(array[1]);
return test;
};
};
以下是我的HTML文件中的代码:
<button class ="btn" ng-csv="main.export()" filename="test.csv">Export</button>
是否有延迟文件下载,直到从main.export()函数加载并返回信息为止?
答案 0 :(得分:1)
请参阅angularjs Doc https://docs.angularjs.org/api/ng/service/$q
中的promises / deferred对象的此实现答案 1 :(得分:0)
之前我遇到过这个问题,我通过使用promise请求填充返回的值来解决它。尝试使导出功能如下:
this.export = function() {
var results = fireFactory.getResults(); //code that returns the array of objects
var csvData = results.$loaded().then(function(array) {
var test= [];
test.push(array[0]);
test.push(array[1]);
return test;
};
return csvData;
};
导出函数应该返回来自请求的数组。此外,您还应在HTML元素中添加lazy-load
,如下所示:
<button class ="btn" ng-csv="main.export()" filename="test.csv" lazy-load="true">Export</button>
答案 2 :(得分:0)
$scope.ExportCsv = async function() {
const msg = await getdata();
return msg;
}
var getdata = function abc(a, b) {
return new Promise(resolve => {
$http.get( // use backend)
.success(function(data, status, headers, config) {
$scope.datacsv = [];
angular.forEach($scope.dt, function(value, key) {
$scope.datacsv.push({
"a":value.a,
"b":value.b});
});
})
setTimeout(() => {
resolve($scope.datacsv);
}, 2000);
});
}
<button type="button" ng-csv="ExportCsv()" filename="ExportCsv.csv" csv-header="['a','b']" charset="utf-8">CSV</button>