我使用angular cli 6和angularfire2。我的代码可以很好地使用经典的ngfor循环和异步管道在模板中显示数据。但是我还必须将数据用于Google图形。这需要打字稿中的数据。如何将我的可观察对象转换为如下所述的打字稿中的数组?
如果需要,我可以使用塞子
我在firedatabase中:
--ppss
--pps1key
--treatement : value1
--DateA : DateA1
--Date B : DateB1
--pps2key
--treatement : value2
--DateA : DateA2
--Date B : DateB2
我想像这样在//component.ts中显示数据:
this.data1 = [
['treatement','dateA', 'dateB'],
[ 'Treatement.value1', new DateA1(), new DateB1()],
[ 'Treatement.value2', new DateA2(), new DateB2()]
];
从我的服务中,我发送这样的可观察对象:
getPPSByPatientid(Patientid: string)
{
return this.database.list('/ppss', ref =>
ref.orderByChild("Patientid").equalTo(Patientid)).valueChanges();
}
我尝试了这个,但是我有很多错误:
patientid: string;
ppssToDisplay;
data1: any[];
ngOnInit() {
this.route.params.forEach((urlParameters) => {
this.patientid = urlParameters['id'];});
this.ppssToDisplay = this.ppssService.getPPSByPatientid(this.patientid);
let interestingFields = [ 'treatement','dateA', 'dateB'];
this.ppssToDisplay.subscribe(obj => {
this.data1 = [
interestingFields,
interestingFields.map(field => obj[field]),
];
console.log(this.data1);
});
错误:
core.js:1598 ERROR Error: Uncaught (in promise): Error: Not an array Error: Not an array
答案 0 :(得分:1)
您将需要使用.subscribe
从Observable中获取数据:
this.ppssToDisplay.subscribe(obj => {
this.data1 = [
interestingFields,
interestingFields.map(field => obj[field]),
];
});
取决于如何使用data1
,您也许还可以在模板中使用Angular的async
管道,而不用直接调用.subscribe
:https://angular.io/api/common/AsyncPipe