AngularFire,访问深层子链接?

AngularFire, access deep child links?

将最新的 Angular 与 Firebase 结合使用,我正在尝试访问登录用户的嵌套较深的项目。

结构如下所示: firebase -> users -> user-uid -> email/name/pass/lists/(其中 lists 有) -> list-uid - > item-uid -> item-name.

我想访问那个 last name-child(最好通过 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>

这有点管用,它向我展示了我放入的对象是静态的,但不是 "one level deeper"...

编辑 2: 更新为 .json 结构。 我可以从名字中得到 "me" 但不能得到更深层次的 "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"
      }
    }
  },

正如我在评论中所说:您的部分问题是由于您在嵌套列表这一事实造成的。 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>