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>
将最新的 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>