在angularfire中异步创建一个数组

时间:2015-05-15 18:12:45

标签: angularjs angularfire

我是angularfire的新手,但我正在尝试创建一个数组,它是一个来自firebase数组的名称列表。当我查看列表返回时,它似乎就是我想要的,所以我知道函数正常工作。

angular.module('myApp')
  .factory('QuestionType', function ($firebaseArray, $firebaseObject, Ref) {
    var types = $firebaseArray(Ref.child('questionTypes'));

    var questionType = {
      list: function(){
        var lists =[];
        types.$loaded().then(function(){
          for(var i=0; i<types.length; i++){
            lists.push(types[i].name);
          }
          return lists;
        });

      }
    };  
    return questionType;
  });

在我的控制器中,我调用该工厂,但因为它是异步的,当我尝试在我的视图中使用该数组时,它会以未定义的形式返回。

$scope.questionType = QuestionType.list();

我发现我需要在我的工厂中使用$ loaded.then,但是如何在我的控制器中执行类似的操作以便在我的视图中正确使用它?

谢谢!

1 个答案:

答案 0 :(得分:1)

返回.then()生成的新承诺。以前你的列表功能没有返回任何内容。

angular.module('myApp')
  .factory('QuestionType', function ($firebaseArray, $firebaseObject, Ref) {
    var types = $firebaseArray(Ref.child('questionTypes'));

    var questionType = {
      list: function(){

        return types.$loaded().then(function(){
          var lists =[];
          for(var i=0; i<types.length; i++){
            lists.push(types[i].name);
          }
          return lists;
        });

      }
    };  
    return questionType;
    });

-

QuestionType.list().then(function(list){
  $scope.questionType = list;
});