试图让ng-csv与Firebase一起使用

时间:2015-02-04 21:15:12

标签: angularjs csv download firebase

我的数据存储在Firebase上。我有一个函数可以从Firebase获取信息并将其作为数组返回。我希望能够使用ng-csv将该文件下载为.csv但是当我下载时它是一个空文件。

如果我尝试从Firebase获取数据,是否可以使用ng-csv?如果有的话,是否有任何示例?

更新(来自OP重复问题):

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

2 个答案:

答案 0 :(得分:1)

你快到了。 Frank van Puffelen走在了正确的道路上,但没有为你的代码提供修复。

return test;

回调中的上述语句将结果返回到promise中。只有使用承诺感知代码才能使用此结果。幸运的是,ng-csv接受了承诺。如果承诺被退回,它应该有效:

this.export = function() {
  var results = fireFactory.getResults()
  //Here we return the promise for consumption by ng-csv
  return results.$loaded().then(function(array) {
    var test= [];
    test.push(array[0]);
    test.push(array[1]);
    //the array is returned from the callback, not export
    return test;
  };
};

答案 1 :(得分:0)

您受到Firebase加载数据的异步性质的欺骗。您似乎认为原始代码中的return test;会返回export函数中的值。但是如果你仔细观察,你会注意到你实际上是从(匿名)回调函数返回的。

如果我们将回调函数分开并添加一些日志记录语句,它会更容易看到它:

function onDataLoaded(array) {
  console.log('Got results from Firebase');
  var test= [];
  test.push(array[0]);
  test.push(array[1]);
  return test;
};
this.export = function() {
  console.log('Starting to get results from Firebase');
  var results = fireFactory.getResults() //code that returns the array of objects
  console.log('Started to get results from Firebase');
  results.$loaded().then(onDataLoaded);
  console.log('Registered result handler');
};

当您致电fireFactory.getResults()时,Firebase将开始从其服务器下载数据。由于这可能需要一些时间,因此下载是异步进行的,并且浏览器会继续执行导出功能,该功能会记录您希望在Firebase中的数据可用时调用的回调。

因此,您将在JavaScript控制台中看到以下输出:

  

开始从Firebase获取结果

     

开始从Firebase获取结果

     

注册结果处理程序

     

从Firebase获得结果