【发布时间】:2017-12-07 08:23:38
【问题描述】:
我有一个这样的简单数据库:
{
"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 管道,但不知道该怎么做。
【问题讨论】:
标签: angularjs typescript firebase firebase-realtime-database angularfire2