我有一个服务,可以解析下面显示的数据:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class ParseDataService {
globalData = [];
constructor() { }
getGlobalData(rawdata) {
var bufferString = rawdata.toString();
var arr = bufferString.split(/\r\n|\n/);
var headers = arr[0].split(",");
var recentDate = headers.slice(-1)[0];
this.parseGlobalData(headers, arr);
this.getTotal(this.globalData, recentDate)
return this.globalData;
}
parseGlobalData(headers, arr) {
for (var i = 1; i < arr.length; i++) {
var data = arr[i].split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
var obj = {};
var isString = ['Province/State', 'Country/Region']
for (var j = 0; j < data.length; j++) {
if (isString.some(element => element == headers[j])) {
obj[headers[j]] = data[j];
} else {
obj[headers[j]] = parseFloat(data[j]);
}
}
// Checks if all objects match the properties set by headers array
if (headers.every(item => obj.hasOwnProperty(item)))
this.globalData.push(obj);
}
}
getTotal(obj, date) {
var total = 0;
obj.map(key => {
total += key[date];
})
}
}
我基本上需要在多个组件中调用getGlobalData函数。这是我的组件之一:
import { Component, OnInit } from '@angular/core';
import { DataService } from '../../services/data.service';
import { ParseDataService } from '../../services/parse-data.service'
@Component({
selector: 'app-recovered',
templateUrl: './recovered.component.html',
styleUrls: ['./recovered.component.css']
})
export class RecoveredComponent implements OnInit {
globalRecov = [];
constructor(private dataService: DataService, private parseData: ParseDataService) {}
ngOnInit() {
// this.USRecov();
this.GlobalRecov();
}
GlobalRecov(){
this.dataService.GlobalRecovGet().subscribe((rawdata) => {
this.globalRecov = this.parseData.getGlobalData(rawdata) <-----Issue is here
})
}
}
如您所见,我使用dataService在URL上执行HTTP get请求,该URL返回一些必须解析的数据。然后,我将其提供给parseData服务以解析所发送的数据并返回globalData数组,以便可以将其保存在globalRecov下。
我的问题在于服务,为什么它不返回数组以便我可以将其重新分配给组件中的数组?
哇,我好蠢。一切都正确,包括组件。我在ngOnInit中的console.log(this.globalRecov)收到一个空数组。似乎是因为尚未填充数组(初始化页面后,console.log立即运行)。我将console.log放入GlobalRecov()函数中,它读出了我期望的数组(对象数组)。