我有这个firebase数据:
{
"userData": {
"user01": {
"name": "User One"
"provider": "provider0001"
},
"user02": {
"name": "User Two"
"provider": "provider0001"
},
"user03": {
"name": "User Three"
"provider": "provider0002"
}
},
"provider": {
"provider0001": {
"users": {
"user01": true,
"user02": true
}
},
"provider0002": {
"users": {
"user03": true
}
}
}
}
控制器
vm.provider = $firebaseObject(ref.child('provider').child('provider0001'));
简单的html
<ul>
<li ng-repeat="user in $ctrl.provider.users">
{{user}}
</li>
</ul>
为什么我不能将{{user}}
列为对象?以上将显示true的列表,但是如何自己访问用户对象?
答案 0 :(得分:3)
您需要将users
- 对象中的键(您的userId)映射到userData
- 对象中的值。您可以使用ng-repeat
指令获取密钥,如下所示:
ng-repeat="(key, value) in $ctrl.provider.users"
然后在您的控制器中,您需要将userData对象添加到控制器范围:
vm.userData = $firebaseObject(ref.child('userdata'));
所以你可以像这样实现你的ng-repeat:
<ul>
<li ng-repeat="(key, value) in $ctrl.provider.users"
ng-init="user = $ctrl.userData[key]">
{{user}}
</li>
</ul>
话虽如此,当您最初检索控制器中的数据时,您可能应该进行此映射。像这样:
function loadData(){
var providerUsers = $firebaseObject(ref.child('provider').child('provider0001').child('users'));
var userData = $firebaseObject(ref.child('userData'));
vm.users = [];
angular.forEach(providerUsers, function(value, key) {
vm.users.push(userData[key]);
});
}
然后你可以在这个新的vm.users
- 数组上使用ng-repeat进行迭代。
这是一个只检索实际映射用户的解决方案。它为每个用户进行查询,因为我找不到一种方法,只需使用一个Firebase查询即可通过密钥加入两个集合。
function loadData(){
var userRef = ref.child('provider').child('provider0001').child('users');
var userDataRef = ref.child('userData');
vm.users = [];
userRef.once('value', function(snapshot){
snapshot.forEach(function(userId){
userDataRef.child(userId.key()).once("value", function(user){
$scope.$apply(function () {
vm.users.push(user.val());
});
});
})
});
}
我对Firebase的熟悉程度非常有限,因此可能有更好的解决方案
答案 1 :(得分:1)
<ul>
<li ng-repeat="(key,user) in $ctrl.provider.users">
{{key}}:{{user}}
</li>
键将给出用户的密钥,用户将给出值