Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在angularfire2/version-5中从Firebase检索数据以传递到数组_Angular_Typescript_Firebase_Firebase Realtime Database_Angularfire2 - Fatal编程技术网

如何在angularfire2/version-5中从Firebase检索数据以传递到数组

如何在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(); 所以我在控制台上做了检查。 然后我

我在Firebase中有一些简单的条目,如:

我只想得到这些值(每个百分比),并将它们传递到一个名为labels的数组中。这样我就可以在代码中使用该数组。这是我的问题

现在,对我来说,这似乎很容易,但显然不是

首先,我面对的是示例中的@angularfire版本5差异(但在他们的GitHub文档中很容易理解)。 因此,第二,我尝试通过以下方式获取数据:

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>