我正在使用Firebase RTDB列表实施聊天应用。这是一个简化的数据服务实现:
public monitorConversation(conversationId): Observable<any> {
return this.afDB.list(`/conversations/${conversationId}/messages`).stateChanges();
}
然后我从组件(页面)中调用它,如:
msgList: Observable<any>;
this.msgList = this.dp.monitorConversation(conversationId);
this.msgList.subscribe(message => {
console.log('new msg:', message.payload.val());
return message.payload.val();
});
});
期望的结果是每次将新消息添加到对话时,我都会收到新消息。发生的事情是我收到了整个邮件列表。我担心随着消息列表的增长,UI性能将开始受到影响,因为我不得不重新显示列表,以及它消耗的带宽发送不必要的流量,因为我假设整个列表都是从Firebase也是如此。
有没有办法只接收更改或新项目?项目在列表中有$键,所以我知道哪个项目是哪个。
答案 0 :(得分:2)
当然,有可能:
Firebase实时数据库
this.rtdb
.list('path', ref => ref.orderByChild('timestamp').startAt(Date.now()))
.stateChanges();
Firebase Firestore
this.afs
.list('path', ref => ref.where('timestamp', '>', new Date()).orderBy('timestamp'))
.stateChanges();
您还可以使用
limitToLast
或limit
获取有关angularfire2官方doc的最新项目。