Angularfire - 检索数组

时间:2016-05-21 12:18:08

标签: javascript angularjs firebase angularfire

我在Firebase中有两个不同的数组:第一个是“常规帖子”,第二个是“用户最喜欢的帖子”。

当用户想要在收藏夹中发帖时,我会将“一般帖子”中这篇独特帖子的所有数据复制到“用户最喜欢的帖子”,并且ID相同。

问题是当帖子名称发生变化时,他只会在“常规帖子”中更改,并在“用户最喜欢的帖子”中保持不变。

所以我尝试在“常规帖子”中仅检索帖子名称,如下所示:

var postRef = new Firebase("https://myapp.firebaseio.com/posts")
var userFavoriteRef = userRef.child($scope.user_id).child("favorite_posts")
$scope.favoritePosts = $firebaseArray(userFavoriteRef)
var favoritePosts = $firebaseArray(userFavoriteRef)

userFavoriteRef.once("value", function(snapshot) {

    snapshot.forEach(function(childSnapshot) {

        var key = childSnapshot.key()
        $scope.key = childSnapshot.key()
        postRef.child($scope.key).child("name").once('value', function(snap) {
            console.log(snap.val())
            $scope.name = snap.val()
        })

    })
})

但我的控制台日志中有“null”......而且它不起作用......

也许我的逻辑是假的......

你怎么看?待读你...谢谢!

1 个答案:

答案 0 :(得分:1)

最好采用不同的方法来存储数据。而不是拥有两个数据副本,只需拥有一个唯一ID。然后,在每个用户上,您可以引用他们最喜欢的帖子的唯一ID。这使您只能在一个位置更新数据。

例如,您可以使用如下数据结构:

myFirebase 
  - users
   -user1
   -user2
   -user3
     -favorites
       -unique2 (reference to post, not the actual post)
       -unique4

  - posts 
    -unique1
    -unique2
    -unique3
    -unique4

因此,您只需拥有一份数据副本,然后从您的用户对象中引用它以检索您要查找的内容。对帖子的更改会反映在引用该帖子的所有位置。