可观察到Angular Firebase不更新内容

时间:2020-07-24 00:06:55

标签: angular firebase-realtime-database

我正在使用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();
}

1 个答案:

答案 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()方法的返回值。