仅从AngularFire列表中获取新项目

时间:2017-12-21 04:20:55

标签: angular firebase firebase-realtime-database angularfire2

我正在使用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也是如此。

有没有办法只接收更改或新项目?项目在列表中有$键,所以我知道哪个项目是哪个。

1 个答案:

答案 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();
  

您还可以使用limitToLastlimit获取有关angularfire2官方doc的最新项目。