Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从每个房间获取所有成员的详细信息_Javascript_Angularjs_Data Structures_Firebase - Fatal编程技术网

Javascript 从每个房间获取所有成员的详细信息

Javascript 从每个房间获取所有成员的详细信息,javascript,angularjs,data-structures,firebase,Javascript,Angularjs,Data Structures,Firebase,使用此类数据: { "rooms": { "one": { "name": "room alpha", "type": "private" }, "two": { ... }, "three": { ... } }, "members": { "one": { "mchen": true, "hmadi": true },

使用此类数据:

{
    "rooms": {
      "one": {
        "name": "room alpha",
        "type": "private"
      },
      "two": { ... },
      "three": { ... }
    },

    "members": {
      "one": {
        "mchen": true,
        "hmadi": true
      },
      "two": { ... },
      "three": { ... }
    },

    ...
如何查询所有房间,例如每个房间的用户名 房间里有人吗

编辑2:

我试着把玩家放到游戏中,玩家被游戏加载,这是一个为游戏加载相关玩家的解决方案。但我只得到球员的ID,我需要用户名或个人资料图片url的例子

您可以看到,玩家仅通过其ID显示,因为我将其保存为: this.root.child'games.childgameID.child'players.childthis.currentUser.id.settrue

但当我得到游戏时:

this.root.child('games').on('value', function(snapshot) {
   console.log(snapshot.val());
});

当然,我只拿到球员的身份证。如何获取游戏玩家的详细信息。

您希望在加载所有游戏时加载所有游戏的玩家。比如:

this.root.child('games').on('value', function(gamesSnapshot) {
  console.log(gamesSnapshot.val());
  var loadedPlayers = {};
  gamesSnapshot.forEach(function(gameSnapshot) {
    var game = gameSnapshot.val();
    Object.keys(game.players).forEach(function(playerId) {
      if (Object.keys(loadedPlayers).indexOf(playerId) == -1) {
        this.root.child('players').child(playerId).once(function('value', function(playerSnapshot) {
          loadedPlayers[playerId] = playerSnapshot.val();
        });
      }
    });
  });
});
所以这段代码几乎是蛮力加载所有游戏中的所有玩家

<>虽然在很多情况下它可能运行良好,但您应该始终考虑,以更符合您应用程序需求的方式组织数据是否更好。例如:除了加载整个玩家,您还可以存储需要在游戏中显示的每个玩家的数据,这些玩家是游戏的一部分。例如,如果您需要显示播放器名称:

games
  -J436712379
    creator: 'ismaelaa'
    players
      simplelogin:35: 'Frank van Puffelen'

如果要加载包含所有成员的所有文件室,我可能只需将整个数据树加载到更高一级。但我觉得这不是你想要的。你能用它下面的编辑链接编辑你的问题并澄清你想完成什么和你已经尝试了什么吗?我已经用更多的细节编辑了答案你已经尝试了什么吗?如果是这样,请张贴您尝试看到的内容。这也将解决许多缺失的信息,例如:您的目标环境。编辑更多详细信息,我使用angular for web