【问题标题】:store array into global variable angular将数组存储到全局变量 angular
【发布时间】:2019-11-01 05:46:22
【问题描述】:

我正在尝试将解析 arrayvalue 保存到全局 array 中。 但全局array 显示我undefined

  dataUrl: string = "assets/data.csv";
  private data:[];
dataInit(){
    this.papa.parse(this.dataUrl, {
      download: true,
      complete: (result) => {
        // result.data.push(this.data);
        this.data = result.data
        // console.log(result.data, "inside parser");
        // console.log(this.data, "global array");
      }

    });
  }
  ngOnInit() {
    this.dataInit();
    console.log(this.data, "inside onInit");
}

控制台

undefined "inside onInit"

【问题讨论】:

  • 尝试像private data:[] = [];一样初始化data
  • 本例中,数据显示Array (0)
  • 我认为 console.log(this.data, "inside onInit"); 在您的 this.dataInit(); 方法完成执行之前打印。尝试取消评论// console.log(result.data, "inside parser"); 并检查。
  • @hrdisback,是的,正是这种情况。如何在 dataInit 函数旁边访问数组值?
  • 您可以使用timeout 块,您可以使用promiseobservables 检查此参考。 medium.com/mr-frontend-community/…

标签: arrays angular global-variables


【解决方案1】:

有两个原因-

  1. 你需要像这样初始化变量private data: Array<any>= [];
  2. 您正在将值绑定到 asyn 方法中并以同步方式调整值。

【讨论】:

  • 你是对的,但我们有什么方法可以将价值转化为全局并在需要时重用?
【解决方案2】:

数据将在complete callback 中提供。所以console.log(this.data)那边。

原因:complete是一个异步工作的回调方法。

dataUrl: string = "assets/data.csv";
data = [];
dataInit(){
    this.papa.parse(this.dataUrl, {
      download: true,
      complete: (result) => {
        // result.data.push(this.data);
        this.data = result.data            
        console.log(this.data);
      }

    });
  }
  ngOnInit() {
    this.dataInit();
}

【讨论】:

  • 是的,控制台显示papa.parse()函数内的数据。我需要将解析数组推入全局数组以访问其他函数中的数据。有没有其他方法可以将 csv 数据推送到全局?
  • @FaisalJanjua,您可以在任何函数中访问 this.data,因为它已经在您的 this 变量中。
【解决方案3】:

将数据属性的初始化更改为类似

private data = [];

或者

private data: Array<T> = []

相应地键入您的数组,而不是 T

【讨论】:

  • 我试过private data:[] = [];private data = []都显示Array(0)
  • 你是在推入数组中的结果内容吗?
【解决方案4】:

将控制台日志放在异步代码的完整函数中。

由于papa.parse下载代码是异步的,控制台日志会显示data的初始值,因为结果还没有准备好。

【讨论】:

    【解决方案5】:

    因为 this.papa.parse 函数是异步的,所以在调用 dataInit 后无法立即获取数据变量的值...最好在完成回调中做

    dataUrl: string = "assets/data.csv";
    private data:[];
    dataInit() {
      this.papa.parse(this.dataUrl, {
        download: true,
        complete: (result) => {
          this.data = result.data
          this.toDo();
        }
      });
    }
    
    ngOnInit() {
      this.dataInit();
    }
    
    toDo(){
      console.log(this.data, "global array");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-18
      • 2020-06-09
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      相关资源
      最近更新 更多