尝试在AngularJS中使用ng-csv和FireBase中的数据

时间:2015-02-05 16:44:48

标签: angularjs csv firebase

我正在尝试使用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()函数加载并返回信息为止?

3 个答案:

答案 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>