在angularFire和angularFireCollection之间进行选择

时间:2013-09-04 22:35:06

标签: firebase angularfire

在此之前,我尝试过使用angularFireangularFireCollection,但总是缺少我的方法。

假设我有一个类似于下面的节点。 您可以看到parent single titlemultiple childs

{
  "parent": {
   "title": "hello world",
    "childs": {
     "childA": "This is child A",
     "childB": "This is child B"
     }
  }
}

我想做什么

  1. 节点上的隐式数据绑定
  2. 聆听childs,以便在发生更改时不会重新检索
  3. 能够循环子节点(子节点)并检索单个值parent.title
  4. 当我使用angularFire时,我无法访问2.

    当我使用angulareFireCollection时,我无法触及1.3.

    我真的需要一些帮助。

1 个答案:

答案 0 :(得分:1)

这是我想到的几个想法。希望他们能帮忙。

手动查询标题并对childs使用angularFireCollection

使用您当前的结构,最简单的方法是手动设置标题并使用angularFireCollection来监视父/子/:

var fb = new Firebase(URL);

// manually update the title
fb.child('parent/title').on('value', function(snap) {
   $scope.title = snap.val();
   // this isn't in angular's apply scope, so force an apply
   $scope.$apply();
});

// track changes to childs    
$scope.childs = angularFireCollection( fb.child('parent/childs') );

拆分数据路径:

通过拆分数据以便父项和子项位于不同的路径中,您可以更轻松地一起使用angularFire和angularFireCollection:

/parents/$parent_id/title
/childs/$parent_id/childA/...
/childs/$parent_id/childB/...

使用angularFire查询父数据,使用angularFireCollection查询子项:

var fb = new Firebase(URL);
angularFire( fb.child('parents/'+parentId), $scope, 'parent' );
$scope.children = angularFireCollection( fb.child('childs/'+parentId );