1

我正在尝试获取属于某个用户的所有鲜花数据,在本例中为 simplelogin:69。

我首先从用户那里获取所有花键,如下所示:

/users/simplelogin:69/flowers/

var ref = new Firebase("https://URL.firebaseio.com/users/"+uid+"/flowers");
var sync = $firebase(ref);

现在我坚持找出一种干净的方法来获取所有花数据,方法是从 simplelogin:69 循环遍历每个花键,而不循环 /flowers/ 中的每个键(在下面的示例中,我只有三个花键,但在生产中我可能有 10k )。

我尝试了 FirebaseIndex 和 firebase-util,但无法使其正常工作。有没有人有任何提示或任何东西?我已经在堆栈上阅读了以前的帖子,但大多数似乎已经过时或不太适合我的目标。真的会应用AngularFire可以解决的任何问题。

亲切的问候, 埃利亚斯

{
  "flowers" : {
    "-JiU57sFAfQwYtIq-LCl" : {
      "image" : "test",
      "name" : "test",
      "type" : "Roses",
      "uid" : "simplelogin:69"
    },
    "-JiU9-3ajlnFLpyUmBvL" : {
      "image" : "dasdasd",
      "name" : "sadasdas",
      "type" : "Roses",
      "uid" : "simplelogin:69"
    },
    "-JiUF-mioK3jQCYy6ZiG" : {
      "image" : "ss",
      "name" : "ss",
      "type" : "Lilies",
      "uid" : "simplelogin:69"
    }
  },
  "users" : {
    "simplelogin:69" : {
      "flowers" : {
        "-JiU57sFAfQwYtIq-LCl" : true,
        "-JiU9-3ajlnFLpyUmBvL" : true,
        "-JiUF-mioK3jQCYy6ZiG" : true
      }
    },
    "simplelogin:70" : {

    },
    "simplelogin:71" : {

    }
  }
}
4

2 回答 2

5

多亏了@Kato 在线程上的回答: Firebase data normalized,它现在可以工作了。我应该如何获取基于此结构的集合?(在创建这个线程之前尝试过,但没有让它工作,所以做了一些小的改动,现在它可以工作了)。

为遇到相同情况的任何人发布解决方案:

$scope.flowers = {};

var flowerRef = new Firebase('https://URL.firebaseio.com/flowers/');
var keyRef = new Firebase('https://URL.firebaseio.com/users/'+checkAuth.auth.uid+'/flowers');

keyRef.on('child_added', function(snap) {
    var flowerId = snap.key();
    flowerRef.child(flowerId).on('value', function(snap) {
        $timeout(function() {
           if( snap.val() === null ) {
              delete $scope.flowers[flowerId];
           }
           else {
              $scope.flowers[flowerId] = snap.val();
           }
        });
    });
});

keyRef.on('child_removed', function(snap) {
    var flowerId = snap.key();
    $timeout(function(snap) {
        delete $scope.flowers[flowerId];
    });
});
于 2015-02-20T00:13:34.793 回答
0

这对于 Firebase 来说确实是一个棘手的问题。如果您为用户的花卉列表实现自定义工厂对象,您可以在列表更改时动态请求新的花卉数据。

于 2015-02-19T20:18:05.363 回答