Firebase从角度工厂获取数据

时间:2015-07-27 06:30:11

标签: angularjs firebase

我必须设置一个工厂,我希望它返回从fire-base获得的数据。工厂是这样的:

.factory('companyFactory', function($firebaseArray) {
var itemsRef = new Firebase("https://somename.firebaseio.com/");
var allNodes=$firebaseArray(itemsRef);

 var myObject={
  getNames: function() {
     itemsRef.once("value", function(snapshot) {
      var nameSnapshot = snapshot.child("companyName");
      var name = nameSnapshot.val();
      return name; //this does not return the data
    });
  }

 } 

return myObject;
});

在我的控制器中,我这样做:

 $scope.companies=companyFactory.getNames();//not working

我该怎么做才能让它发挥作用。我想获取数据一次,然后使用工厂将其提供给不同的视图

1 个答案:

答案 0 :(得分:1)

Firebase的请求itemsRef.once是异步的,因此您需要使用promise来返回names

var myObject={
  getNames: function() {
     var defer = $q.defer();
     itemsRef.once("value", function(snapshot) {
      var nameSnapshot = snapshot.child("companyName");
      var name = nameSnapshot.val();
      defer.resolve(name); //this does not return the data
    });
    return defer.promise;
  }

在您的调用代码中,您需要使用promise回调模式来获取数据。

companyFactory.getNames().then(function(data) {
  $scope.companies=data;
});