在ng-repeat中从firebase返回值

时间:2016-09-12 18:39:54

标签: javascript angularjs asynchronous firebase-realtime-database ng-repeat

我使用AngularJS作为数据库的前端和firebase。

我有一个显示ng-repeat个故事的firebasearray。这些故事中的每一个都与许多可以成为其中一部分的集合相关联。集合和故事存储在我的firebase服务器上的两个不同位置,我使用密钥将它们绑定在一起。

我在数据库中对故事对象的模型如下所示:

storyId: {
    title: 'title',
    in_collections: {
      0: collectionId //collection id that refers to a specific collection in the database
      1: collectionId
    }
}

因此,每当我显示一个故事对象时,我都无法访问其标题,只能访问其标识。为了获得标题,我需要为该名称调用服务器。 我目前有这个:

模板:

<div>
  {{story.title}}
  In collections: 
  <span ng-repeat="(key, collection) in story.in_collections">
    {{getCollectionTitle(key)}}
  <span>
</div>

控制器:

app.controller("exploreCtrl", function($scope, Stories, Collections){

  $scope.story = Stories.getStory(storyId); //comes as a firebase array

  $scope.getCollectionTitle = function(collectionId){
    Collections.getCollectionTitle(collectionId).then(function(title){
        console.log(title.val());
        return title.val();
    });
  }
});

服务:

app.factory('Collections', function(){
  var ref = firebase.database().ref('collections');
  return {
    getCollectionTitle: function(collectionId){
      return ref.child(collectionId).child('title').once('value');
    }
  }
})

.factory('Stories', function($firebaseObject){
  var ref = firebase.database().ref('stories');
  return{
    getStory: function(id){
      return $firebaseObject(ref.child(id));
    }
  }
})

我可以看到它在我的console.log(title.val())中获取了正确的集合标题,但我无法找到将其应用于视图的方法。它只是空洞而且一直都是这样。

感谢任何帮助。 非常感谢你!

0 个答案:

没有答案