使用动态变量从订阅的Observable中获取值

时间:2018-12-29 06:39:52

标签: angular google-cloud-firestore observable

我正在学习Observables如何通过Angular和Google Firestore工作。

this.allinvoicesCollection = this.afs.collection('clients').doc(this.clientId).collection('inbox').valueChanges();
    this.allinvoicesCollection.subscribe(val => {
      this.fileUrl = val[this.currentIndex].downloadURL;
    })

我正在使用上面的代码获取fileUrl。

每当变量“ this.currentIndex”更改时,我都想更新fileUrl,但是上述代码显然无法实现。

我了解这仅在更改集合中的文档时触发。在检测到“ this.currentIndex”中的更改时,如何触发它?我应该提到,“ this.currentIndex”不是一个Observable,而是用户更改的简单数字变量。

1 个答案:

答案 0 :(得分:0)

将当前索引设为Subject,您就可以轻松地检测到更改。

currentIndex= new Subject<number>();

,然后每当它更改时,您都可以推送新数据。假设它在按钮clik上更改,或者如果它是输入控件,则可能在keyup上可以推送更新的索引。

onIndexChange(id:number){
    this.currentIndex.next(id);
}

在第二部分中,当您预订allinvoicesCollection时,请使用flatMap。 您可以查看this答案以了解如何进行嵌套订阅。