【问题标题】:angularfire2 for firestore observable subscribing once at a timeangularfire2 for firestore observable 一次订阅一次
【发布时间】:2018-09-19 13:55:57
【问题描述】:

我想让 Firestore 获取可观察的项目。但问题是它一次订阅一次。以下是我的代码:

在提供者中:

this.allSponser = this.afs.collection<Sponsoremphasized text('sponsors').snapshotChanges().pipe(map(actions => { 
    return actions.map(a => 
    { 
        const data = a.payload.doc.data() as Sponsor; 
        data.id = a.payload.doc.id; 
        return data; 
    }); 
})); 

在注册页面中:

this.allSponser.subscribe(data=>{ console.log(data); }) 

如果我要返回任何其他页面并返回再次注册,则在第一次加载时打印它不会打印。

【问题讨论】:

  • 欢迎来到 SO。当您发布问题时,使用编辑器顶部的{} 图标格式化您的代码部分,并使其易于阅读(换行符、缩进等)。您的问题,正如最初发布的那样,几乎无法阅读。

标签: angular ionic3 google-cloud-firestore


【解决方案1】:

首先提到当你离开你的组件时,它会被销毁并重新创建,所以记住这一点,你需要订阅ngOnInit中的observables和'ngOnDestroy'中的unsubscribe /p>

另一点是我通常会从我的服务中返回observalbe,类似这样

getSoponsors() {
return this.afs.collection<Sponsoremphasizedtext>('sponsors').snapshotChanges().pipe(map(actions => { 
    return actions.map(a => 
    { 
        const data = a.payload.doc.data() as Sponsor; 
        data.id = a.payload.doc.id; 
        return data; 
    }); 
})); 
}

然后在我的组件中

isAlive: boolean = true

ngOnInit() {
  this.service.getSoponsors()
    .pipe(takeWhile(() => this.isAlive))
    .subscribe(data => ...)
}

ngOnDestroy() {
  this.isAlive = false;
}

【讨论】:

  • 感谢 RezaRahmati 的回答,但我不想每次我想在变量中存储 observable 并订阅它时订阅该函数。所以它会减少我没有调用 firebase Ex- this.allSponser 在这个变量中我想存储 observable 并在每个页面中订阅它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2023-03-15
  • 2018-02-02
  • 2016-09-25
  • 2020-08-16
  • 2019-05-10
  • 1970-01-01
相关资源
最近更新 更多