我有像这样的firebase数据库。我正在使用angularfire2 5.0来查询数据库。
groups{
-L01ocnd1jxL8wOkLqRK{
groupCode: "2eotrg"
groupDescription: "Test"
groupName: "Test"
members{
YuKVbvuGTNgw6OmVr4N89XZG88H3{
mail: "victor@gmail.com"
name: "Victor"
subscription{
-L01ocnkVVLXPNqCyfLi{
rolegroup: 3
state: true;
}
}
}
}
rules{
firsRule: 0
secondRule: 0
}
}
}
我正在尝试渲染规则和该组的成员,但我不能这样做。
我将该组作为列表阅读
this.items = this.afDB.list('/groups/'+groupKey).snapshotChanges().map(changes => {
return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});
在我看来,我试图列出成员和规则,但我不能这样做。
<ion-item *ngFor="let item of items | async">
{{item | json}}
</ion-item>
您的帮助请解释我该怎么做。
在angularfirebase的先前版本中,我使用了类似的东西。
<ion-list inset>
<ion-item *ngFor="let item of items | async">
<div *ngFor="let member of item.mebers">
{{member | json}}
</div>
</ion-item>
</ion-list>
感谢您的帮助。
答案 0 :(得分:-1)
解。
snapshotChanges返回一个SnapshotAction数组。
interface SnapshotAction {
type: string;
payload: DatabaseSnapshot;
key: string;
prevKey: string | undefined;
}
解决方案是读取返回标准DabaseSnapshot的SnapshotAction.payload,然后使用firebase为此接口提供的功能。 (https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot)
这是代码......
this.groupRef.snapshotChanges().subscribe(snapshot => {
snapshot.forEach(snap => {
console.log(snap.key);
if(snap.key == 'groupCode'){
var datasnapshot = snap.payload;
datasnapshot.val();
console.log(datasnapshot.val());
}
if(snap.key == 'members'){
var datasnapshot = snap.payload;
console.log("Snapchot"+JSON.stringify(datasnapshot));
datasnapshot.forEach(function(childSnapshot) {
var key = childSnapshot.key;
var childData = childSnapshot.val();
console.log(key);
console.log(childData.mail);
console.log(childData.subscription);
var subscriptionsnap = childSnapshot.child("subscription");
console.log(subscriptionsnap);
subscriptionsnap.forEach(function(subsc){
console.log(subsc.key);
var subsdata = subsc.val();
console.log(subsdata.rolegroup);
});
});
}
}
);
});