将组件中的新数组分配给服务中函数返回的数组

问题描述 投票:0回答:1

我有一个服务,可以解析下面显示的数据:

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下。

我的问题在于服务,为什么它不返回数组以便我可以将其重新分配给组件中的数组?

angular angular-services
1个回答
0
投票

哇,我好蠢。一切都正确,包括组件。我在ngOnInit中的console.log(this.globalRecov)收到一个空数组。似乎是因为尚未填充数组(初始化页面后,console.log立即运行)。我将console.log放入GlobalRecov()函数中,它读出了我期望的数组(对象数组)。

© www.soinside.com 2019 - 2024. All rights reserved.