Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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
Angularjs 如何从firebase中的所有子位置获取特定对象值_Angularjs_Firebase - Fatal编程技术网

Angularjs 如何从firebase中的所有子位置获取特定对象值

Angularjs 如何从firebase中的所有子位置获取特定对象值,angularjs,firebase,Angularjs,Firebase,在火基 var userRef = http://xx.firebaseio.com/users 我可以让所有的用户都喜欢 var userAllRecords=$firebase(userRef)。$asObject() 这将给我所有的记录,我可以过滤它们,得到期望值/操作 但是,当我只对一组记录感兴趣时,比如说用户余额和所有用户的姓名,我怎么能避免这些额外的操作呢 所以我看起来像是在asObject()方法中传递对象名。e、 g仅从所有用户处获取用户余额和用户名 e、 g:var user

在火基

var userRef = http://xx.firebaseio.com/users
我可以让所有的用户都喜欢

var userAllRecords=$firebase(userRef)。$asObject()

这将给我所有的记录,我可以过滤它们,得到期望值/操作

但是,当我只对一组记录感兴趣时,比如说用户余额和所有用户的姓名,我怎么能避免这些额外的操作呢

所以我看起来像是在asObject()方法中传递对象名。e、 g仅从所有用户处获取用户余额和用户名

e、 g:var userAllRecords=$firebase(userRef)。$asObject(用户余额,用户名)


我在这里找不到任何匹配项:

您无法以您想要的方式获取节点集合的子集。Firebase始终检索/同步完整节点

要解决这个问题,您必须规范化数据结构。您大致有三种选择:

  • 为每个用户创建一个只有
    用户名和余额中的“join”的节点(使用
    一次
  • 将所有用户的余额存储在单独的
    balances
    节点中
  • 混合使用前两种方法,并将余额存储在每个用户下和全局
    余额
    节点中
  • 因此,如果您现在有这种结构:

    users
        userid1
            user_name: "Frank van Puffelen"
            user_balance: 15281
        userid2
            user_name: "star18bit"
            user_balance: 1178
    
    方法1:保留用户ID索引 数据结构变为:

    userids
        userid1
        userid2
    users
        userid1
            user_name: "Frank van Puffelen"
            user_balance: 15281
        userid2
            user_name: "star18bit"
            user_balance: 1178
    
    balances
        userid1: 15281
        userid2: 1178
    users
        userid1
            user_name: "Frank van Puffelen"
        userid2
            user_name: "star18bit"
    
    然后代码是这样的:

    var root = new Firebase(FB_URL);
    new root.child('userids').on('child_added', function(useridsnapshot) {
      var userid = useridsnapshot.name();
      root.child('users/'+userid+'/user_balance').once('value', function(balancesnapshot) {
          // TODO: do something with balancesnapshot.value();
      }
    };
    
    var root = new Firebase(FB_URL);
    new root.child(balances).on('child_added', function(snapshot) {
      var userid = snapshot.name();
      var balance = snapshot.val();
    };
    
    方法2:在全球范围内保持平衡 数据结构变为:

    userids
        userid1
        userid2
    users
        userid1
            user_name: "Frank van Puffelen"
            user_balance: 15281
        userid2
            user_name: "star18bit"
            user_balance: 1178
    
    balances
        userid1: 15281
        userid2: 1178
    users
        userid1
            user_name: "Frank van Puffelen"
        userid2
            user_name: "star18bit"
    
    然后代码是这样的:

    var root = new Firebase(FB_URL);
    new root.child('userids').on('child_added', function(useridsnapshot) {
      var userid = useridsnapshot.name();
      root.child('users/'+userid+'/user_balance').once('value', function(balancesnapshot) {
          // TODO: do something with balancesnapshot.value();
      }
    };
    
    var root = new Firebase(FB_URL);
    new root.child(balances).on('child_added', function(snapshot) {
      var userid = snapshot.name();
      var balance = snapshot.val();
    };
    

    您可能可以从中找出方法3。

    您无法以您想要的方式获得节点集合的子集。Firebase始终检索/同步完整节点

    要解决这个问题,您必须规范化数据结构。您大致有三种选择:

  • 为每个用户创建一个只有
    用户名和余额中的“join”的节点(使用
    一次
  • 将所有用户的余额存储在单独的
    balances
    节点中
  • 混合使用前两种方法,并将余额存储在每个用户下和全局
    余额
    节点中
  • 因此,如果您现在有这种结构:

    users
        userid1
            user_name: "Frank van Puffelen"
            user_balance: 15281
        userid2
            user_name: "star18bit"
            user_balance: 1178
    
    方法1:保留用户ID索引 数据结构变为:

    userids
        userid1
        userid2
    users
        userid1
            user_name: "Frank van Puffelen"
            user_balance: 15281
        userid2
            user_name: "star18bit"
            user_balance: 1178
    
    balances
        userid1: 15281
        userid2: 1178
    users
        userid1
            user_name: "Frank van Puffelen"
        userid2
            user_name: "star18bit"
    
    然后代码是这样的:

    var root = new Firebase(FB_URL);
    new root.child('userids').on('child_added', function(useridsnapshot) {
      var userid = useridsnapshot.name();
      root.child('users/'+userid+'/user_balance').once('value', function(balancesnapshot) {
          // TODO: do something with balancesnapshot.value();
      }
    };
    
    var root = new Firebase(FB_URL);
    new root.child(balances).on('child_added', function(snapshot) {
      var userid = snapshot.name();
      var balance = snapshot.val();
    };
    
    方法2:在全球范围内保持平衡 数据结构变为:

    userids
        userid1
        userid2
    users
        userid1
            user_name: "Frank van Puffelen"
            user_balance: 15281
        userid2
            user_name: "star18bit"
            user_balance: 1178
    
    balances
        userid1: 15281
        userid2: 1178
    users
        userid1
            user_name: "Frank van Puffelen"
        userid2
            user_name: "star18bit"
    
    然后代码是这样的:

    var root = new Firebase(FB_URL);
    new root.child('userids').on('child_added', function(useridsnapshot) {
      var userid = useridsnapshot.name();
      root.child('users/'+userid+'/user_balance').once('value', function(balancesnapshot) {
          // TODO: do something with balancesnapshot.value();
      }
    };
    
    var root = new Firebase(FB_URL);
    new root.child(balances).on('child_added', function(snapshot) {
      var userid = snapshot.name();
      var balance = snapshot.val();
    };
    

    您可能可以从中找到方法3。

    我认为firebase刚刚添加了一种正确的方法,通过为每个表/子表添加规则“indexOn”来从所有子级获取特定对象,是的,从我目前看到的情况来看,它看起来相当不错。但请记住,该功能处于测试阶段,因此可能仍会更改。而且你应该总是喜欢一个符合你需要的好的数据结构。我认为firebase刚刚添加了一种正确的方法,通过为每个表/子表添加规则“indexOn”来从所有子表获取特定对象。是的,从我到目前为止看到的情况来看,它看起来相当不错。但请记住,该功能处于测试阶段,因此可能仍会更改。而且您应该始终选择符合您需要的良好数据结构。firebase刚刚宣布了通过在每个表中添加规则“indexOn”来从所有子级获取特定对象的正确方法/child firebase.com/docs/beta/queriesfirebase刚刚宣布了通过在每个表中添加规则“indexOn”来从所有子级获取特定对象的正确方法表/child firebase.com/docs/beta/querys