AngularFire,访问深层子链接?

时间:2016-03-25 20:53:02

标签: angularjs firebase angularfire firebase-realtime-database

使用最新的Angular和Firebase,我正在尝试从登录用户访问一些深层嵌套项目。

结构看起来像这样: firebase - >用户 - > user-uid - > email / name / pass / 列表 /(其中列表有) - > list-uid - > item-uid - >项目名称。

我想访问该姓氏 - 孩子(最好通过ng-repeat,因为它们是列表项,我希望它们显示在每个用户仪表板上)。

我一直在尝试不同的方法,但最接近的方法是:

$scope.user = $firebaseObject(ref.child('users').child(authData.uid));

然后在我的html中(现在):

<span>{{user.lists}}</span>

其中打印出如下内容:{“-uid”:{“age”:“21”,“name”:“martin”},{“ - uid”:{“age”:“25”,“name” “:”john“}}}等等等。

参考文献:

        var ref = new Firebase('https://url.firebaseio.com');

有什么想法吗?谢谢!

编辑: 我试着像这样添加一个ng-repeat:

<li ng-repeat="list in user.lists">{{list.name}}</li>

这有点奏效,它向我展示了我放入的物体,这些物体是静止的,但不是“更深层次”的物体......

编辑2: 更新了.json的结构。 我可以从名字中得到“我”而不是更深层次的“mjölk”:

"users" : {
"8a6da12a-0992-43f5-bb33-95ddd49fed8c" : {
  "email" : "torsten@gmail.com",
  "lists" : {
    "-KDjNYC8GS2QFHYyp74L" : {
      "age" : "other",
      "name" : "me"
    },
    "8a6da12a-0992-43f5-bb33-95ddd49fed8c" : {
      "-KDjN_NkTQmj_1R00xZL" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "mjölk"
      },
      "-KDjN_r0WmT6xiZwadO5" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "ägg"
      },
      "-KDjNagkBWmJRj6oQqc2" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "rejv"
      },
      "-KDjNb5Fpak_9A_rvn8W" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "kossor"
      },
      "-KDjOVtAFJoYVNUkapNC" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "piss"
      },
      "-KDjOlemXR2eOoqPBh0v" : {
        "done" : false,
        "id" : 1458936677873,
        "name" : "mjölk igen"
      }
    }
  },

1 个答案:

答案 0 :(得分:2)

正如我在评论中已经说过的那样:部分问题是由于您正在嵌套列表。 Firebase documentation recommends to nest data sparingly这就是其中之一的原因有很多。

要取消数据,您可以将用户配置文件与每个用户的列表分开存储:

"users" : {
  "8a6da12a-0992-43f5-bb33-95ddd49fed8c" : {
    "email" : "torsten@gmail.com",
  }
},
"user_lists" : {
  "-KDjNYC8GS2QFHYyp74L" : {
    "age" : "other",
    "name" : "me"
  },
  "8a6da12a-0992-43f5-bb33-95ddd49fed8c" : {
    "-KDjN_NkTQmj_1R00xZL" : {
      "done" : false,
      "id" : 1458936351305,
      "name" : "mjölk"
    },
    "-KDjN_r0WmT6xiZwadO5" : {
      "done" : false,
      "id" : 1458936351305,
      "name" : "ägg"
    },
    "-KDjNagkBWmJRj6oQqc2" : {
      "done" : false,
      "id" : 1458936351305,
      "name" : "rejv"
    },
    "-KDjNb5Fpak_9A_rvn8W" : {
      "done" : false,
      "id" : 1458936351305,
      "name" : "kossor"
    }
  }
}

现在,如果您想显示个人资料列表和当前用户的列表,您可以:

var ref = new Firebase('https://yours.firebaseio.com');
$scope.users = $firebaseArray(ref.child('users'));
$scope.lists = $firebaseArray(ref.child('user_lists').child(auth.uid));

然后在你的HTML中:

<p>Users:</p>
<ul>
  <li ng-repeat="user in users">{{user.email}}</li>
</ul>

<p>Lists for you:</p>
<ul>
  <li ng-repeat="list in lists">{{list.name}}</li>
</ul>