【问题标题】:Angular Firebase observable not updating contentAngular Firebase observable 不更新内容
【发布时间】:2020-07-24 08:29:41
【问题描述】:

我正在使用 angular 和 firebase 来创建一个简单的聊天组件。当我在我的组件中创建一个简单的 observable 时,我可以使用适当的 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();
}

【问题讨论】:

    标签: angular firebase-realtime-database


    【解决方案1】:

    看起来 getConversations 是一个基本的 get,所以你在 init 上调用它一次,然后 observable 就完成了。

    我要做的是在您的代码中进行某种可观察或触发,以重新调用 getConversations() 方法调用(可能是 RxJS 间隔:https://www.learnrxjs.io/learn-rxjs/operators/creation/interval)或手动刷新按钮。

    其他潜在原因(假设 getConversations() 方法充当真正的 observable .. 它可能发生在角度变化检测之外。尝试添加...

     constructor(private ref: ChangeDetectorRef) {
    ...
    ...
     this.conversations = tempArray;
    this.ref.detectChanges();
    

    除此之外,我会记录以查看 observable 是否被触发/getConversations() 方法的返回值是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-19
      • 2020-09-09
      • 1970-01-01
      • 2019-01-20
      • 2018-01-24
      • 2017-03-26
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多