Javascript firebase获取子节点的列表

Javascript firebase获取子节点的列表,javascript,angularjs,ionic,firebase,angularfire,Javascript,Angularjs,Ionic,Firebase,Angularfire,我的firebase上有以下结构 "users" : { "06f0536d-2326-43a0-81db-9e94acc77b4e" : { "address" : "xxxxxxxxxxxxx", "displayName" : "xxxxxxx", "email" : "xxx@xxx.com", "fleet" : { "-K6iGFIu5Jwu_AmWWDTL" : { "avafrom" : 1451343600000, "avaunt

我的firebase上有以下结构

"users" : {
"06f0536d-2326-43a0-81db-9e94acc77b4e" : {
  "address" : "xxxxxxxxxxxxx",
  "displayName" : "xxxxxxx",
  "email" : "xxx@xxx.com",
  "fleet" : {
    "-K6iGFIu5Jwu_AmWWDTL" : {
      "avafrom" : 1451343600000,
      "avauntil" : 1454540400000,
      "brands" : "xxxxxxxxxx",
      "desc" : "xxxxxxxxxxxx",
      "dmile" : 5,
      "drate" : 22,
    },
    "-K6iGUY6Y19PExwBklal" : {
      "avafrom" : 1451516400000,
      "avauntil" : 1454540400000,
      "brands" : "xxxxx",
      "desc" : "xxxxxxxxxxxxx",
      "dmile" : 5,
      "drate" : 12,
     }
  },
  "phone" : "+49xxxxxxx",
  "role" : "xxxxxxxxxxx"
},
"22dbc365-3201-4bc0-9f19-2a8a64bea235" : {
  "address" : "xxxxxxxxxxx",
  "displayName" : "xxxx",
  "email" : "xxxx@xxxx.com",
  "fleet" : {
    "-K6ge_Y4enb_a13O1eCu" : {
      "avafrom" : 1451343600000,
      "avauntil" : 1451516400000,
      "brands" : "xxxxxxxxxxx",
      "desc" : "xxxxxxxxxxxxx",
      "dmile" : 1,
      "drate" : 22,
    },
    "-K6gexE9KXd3WGBnjIY8" : {
      "avafrom" : 1451343600000,
      "avauntil" : 1451516400000,
      "brands" : "xxxxxxxxxx",
      "desc" : "xxxxxxxxxxxxxx",
      "dmile" : 1,
      "drate" : 22,
    }
  },
  "phone" : "+49xxxxxx",
  "role" : "xxxxxxx"
},
<pre>{{ fleet | json ||</pre>
以及如何使用此工具获取所有用户的车队列表?我尝试了以下方法:

var ref = new Firebase(fb+'users');
        return {
            fleet: function(){
                ref.orderByChild("fleet").on("child_added", function(snapshot) {
                    console.log("data trucks", snapshot.val());
                    return snapshot.val();
                })
            }
        }
但我最终得到了所有用户的数据,不仅仅是他们的车队。我甚至不确定我是否做得对,我试图在这里建立一对多的关系,每个用户都可以拥有一个车队,其中包括一个汽车列表。我是Firebase的新手,英语不是我的母语,所以我不太理解他们的文档,我想如果有人能给我举个例子,这将是一个很大的帮助


任何帮助都将不胜感激,提前感谢

如果您只需要
车队
节点,您需要重新构建数据结构。当您从父节点读取数据时,也将获得所有子节点

您可以为
fleet
关闭
uid
,下面是一个示例:

{
   "users": {
      "06f0536d-2326-43a0-81db-9e94acc77b4e" : {
         "address" : "xxxxxxxxxxxxx",
         "displayName" : "xxxxxxx",
         "email" : "xxx@xxx.com"
      }
   },
   "fleet": {
      "06f0536d-2326-43a0-81db-9e94acc77b4e" : {
         "-K6ge_Y4enb_a13O1eCu" : {
            "avafrom" : 1451343600000,
            "avauntil" : 1451516400000,
            "brands" : "xxxxxxxxxxx",
            "desc" : "xxxxxxxxxxxxx",
            "dmile" : 1,
            "drate" : 22
         }
      }
   }
}
您也不能从异步函数返回

ref.orderByChild("fleet").on("child_added", function(snapshot) {
  return snapshot.val(); // won't work
})
数据必须通过网络下载,因此不会同步发生

您可以传入回调:

function FleetFactory() {
  var ref = new Firebase(fb+'users');
  return {
    fleet: function(callback){
      ref.orderByChild("fleet").on("child_added", callback);
    }
  }
}

function MyController(FleetFactory) {
   FleetFactory.fleet(function(snap) {
      console.log(snap.val());
   });
}
但是,这仍然不是你理想的情况

angular.module('app', ['firebase'])
  .constant('FirebaseUrl', '<my-firebase-app>')
  .service('rootRef', ['FirebaseUrl', Firebase])
  .controller('MyCtrl', MyController);

function MyController($scope, rootRef, $firebaseArray) {
  $scope.fleet = $firebaseArray(rootRef.child('fleet'));
}

谢谢你的回复,我已经尝试过回调方法,但它仍然会给我用户树的所有对象,我只需要从所有用户那里获取车队列表,而不是从用户那里获取所有数据。对于第二种方法,使用我的控制器中的数组,它返回一个空数组,可能是因为每个车队项目的唯一id?似乎无法从fleet中找到子节点谢谢,我能够获得所有用户群的列表,但我如何显示例如“displayName”拥有的这个群,目前我正在使用ng repeat=“item in fleet”迭代群数组,但我对如何从其他节点获取群所有权数据感到困惑。