如何在angularfire2/version-5中从Firebase检索数据以传递到数组
我在Firebase中有一些简单的条目,如: 我只想得到这些值(每个百分比),并将它们传递到一个名为labels的数组中。这样我就可以在代码中使用该数组。这是我的问题 现在,对我来说,这似乎很容易,但显然不是 首先,我面对的是示例中的@angularfire版本5差异(但在他们的GitHub文档中很容易理解)。 因此,第二,我尝试通过以下方式获取数据:如何在angularfire2/version-5中从Firebase检索数据以传递到数组,angular,typescript,firebase,firebase-realtime-database,angularfire2,Angular,Typescript,Firebase,Firebase Realtime Database,Angularfire2,我在Firebase中有一些简单的条目,如: 我只想得到这些值(每个百分比),并将它们传递到一个名为labels的数组中。这样我就可以在代码中使用该数组。这是我的问题 现在,对我来说,这似乎很容易,但显然不是 首先,我面对的是示例中的@angularfire版本5差异(但在他们的GitHub文档中很容易理解)。 因此,第二,我尝试通过以下方式获取数据: this.items = db.list('/percentage').valueChanges(); 所以我在控制台上做了检查。 然后我
this.items = db.list('/percentage').valueChanges();
所以我在控制台上做了检查。
然后我检查了关于某某的其他问题,第三,在示例中,我被告知“它的异步数据,所以您应该订阅它”,我确实订阅了它,并再次将其记录在控制台中,以查看我的数组的外观。
当然,在那之后,我检查了更多的例子,哦,我应该map()它。那我就用
this.labels = db.list('/percentage').valueChanges().map(res => this.labels = res);
:
我没有得到任何错误,但我无法找到一种方法来获取这些数据作为一个数组,这对我来说是可行的。
如果有人能给我解释一下,我会很高兴的。
谢谢
angularfire2
默认情况下使用可观察对象
。如果你仔细阅读一下,这是有益的
this.items=db.list('/percentage').valueChanges()
根据您的屏幕截图,db.list().valueChanges()
从技术上讲是一个可观察的。可以订阅Observable,但要分配值,您必须将赋值语句放入Observable的回调函数中,而不是Observable本身。以下是如何做到这一点:
db.list('/percentage')
.valueChanges()
.subscribe(res => {
console.log(res)//should give you the array of percentage.
this.labels = res;
})
请注意,对于以上内容,没有this.lables=db.list()
另一方面,.map()
只是可观察对象中的另一个操作符。运算符用于操纵可观察对象的行为。每个操作员如何工作超出了这个答案的范围,我建议阅读文档
编辑:
如果您想对数据进行一些后处理,您将使用.map()
或者,您可以在subscribe
回调中执行任何后期处理:
db.list('/percentage')
.valueChanges()
.subscribe(res => {
console.log(res)//should give you the array of percentage.
//do your post processing to your res here.
res = res.map(x=> x+ " Hello World");
this.labels = res;
})
您可以在html页面上显示您的数组
<p *ngFor="let item of items | async;>
{{item}}
</p>
谢谢您的回答。真的帮助我了解了一些事情。但是有一件事,因为这个数据是异步的,所以这个数据比我的计算代码来得晚。如何使我的计算在获取此标签数组后开始?@BlanketSniffer这就是使用.map()
对数据进行操作(也称为计算)的时候。否则,您可以在订阅回调中执行此操作。请参阅edit我知道如何使用该模板。但我想将数据存储在一个数组中,以便在计算中使用。
<p *ngFor="let item of items | async;>
{{item}}
</p>