将可观察对象转换为数组以绘制googlechart

时间:2018-06-29 15:12:14

标签: angular typescript angularfire2 google-chartwrapper rxjs6

我使用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

1 个答案:

答案 0 :(得分:1)

您将需要使用.subscribe从Observable中获取数据:

this.ppssToDisplay.subscribe(obj => {
  this.data1 = [
    interestingFields,
    interestingFields.map(field => obj[field]),
  ];
});

取决于如何使用data1,您也许还可以在模板中使用Angular的async管道,而不用直接调用.subscribehttps://angular.io/api/common/AsyncPipe