我正在使用angular和firebase创建一个简单的聊天组件。当我在组件中创建一个简单的可观察对象时,可以使用适当的ID将新文档添加到集合中,但是什么也没有发生。观察者对更新的数据没有反应。
当我重新加载页面时,它反映了其他数据。但是,我希望对符合要求的集合所做的更改会自动反映出来。谢谢
组件:
ngOnInit(): void
{
this._chatService.getConversations()
.subscribe(result => {
var tempArray = [];
var docData;
result.forEach((doc) => {
docData=doc.data();
docData.uid=doc.id;
//console.log(doc.id, '=>', doc.data());
tempArray.push(docData);
});
this.conversations = tempArray;
console.log('The conversations in the chats are ...');
console.log(this.conversations);
});
}
服务:
/**
* Get conversations
*
*/
getConversations( ):Observable<any> {
let userData = JSON.parse(localStorage.getItem('userData'));
console.log('participantId of '+userData.uid);
return this.afs.collection('convParticipants', ref => ref.where('participantId', '==', userData.uid)).get();
}
答案 0 :(得分:0)
getConversations似乎是一个基本的get,因此您在init上调用一次,然后完成可观察性。
我要做的是在代码中进行某种可观察或触发,以重新调用getConversations()
方法调用(可能是RxJS间隔:https://www.learnrxjs.io/learn-rxjs/operators/creation/interval)或手动刷新按钮。 / p>
其他潜在原因(假设getConversations()
方法是一个真正的可观察的..
它可能发生在角度变化检测之外。尝试添加...
constructor(private ref: ChangeDetectorRef) {
...
...
this.conversations = tempArray;
this.ref.detectChanges();
除此之外,我将记录日志以查看是否触发了可观察对象/ getConversations()方法的返回值。