0
我有一個簡單的數據庫是這樣的:如何在單個Angular頁面中顯示Firebase多路徑信息?
{
"groups": {
"123": {
"name": "developers",
"users": {
"1": true
},
"users_count": 1
}
},
"events": {
"456": {
"name": "Developers conference",
"users": {
"1": true
},
"users_count": 1
}
},
"users": {
"1": {
"name": "Jon",
"groups": {
"123": true
},
"events": {
"456": true
}
}
}
}
在用戶的主頁,我要顯示所有有關團體和活動,如他們的名字的信息。所以,在Homepage
班,我這樣做:
獲取用戶的信息後,我檢查它是否有一個組或事件。如果是這樣,我使用key
將key
的每一個subscribe()
加到組或事件中,並在加載後將數據添加到數組中。
export class HomePage {
user: FirebaseObjectObservable<any>;
groupsKey: Array<any>;
groups: Array<any> = [];
eventsKey: Array<any>;
events: Array<any> = [];
constructor(private _auth: AuthService, public afDB: AngularFireDatabase) {
this.user = this.afDB.object(`/users/${this._auth.uid}`);
this.user.subscribe(user =>{
if(user.groups){
this.groupsKey = Object.keys(user.groups);
this.groupsKey.forEach(key => {
let groupObservable = this.afDB.object(`/groups/${key}`);
groupObservable.subscribe(group => {
this.groups.push(group);
})
})
}
if(user.events){
this.eventsKey = Object.keys(user.events);
this.eventsKey.forEach(key => {
let eventObservable = this.afDB.object(`/events/${key}`);
eventObservable.subscribe(event => {
this.events.push(event);
})
})
}
})
}
}
在HTML部分:
<div *ngFor="let item of groups">
{{item.name}}: {{item.users_count}} users
</div>
這種方法適用一見鍾情,但是當一些更新的一組或事件製成,重複被壓入陣中,要恢復正常當頁面重新加載時。
在這種情況下什麼可以是更好的實現?我知道我應該刪除陣列並使用async
管道,但無法弄清楚如何做到這一點。