arrays - Angular 2 TS对象数组仅在订阅服务时定义

标签 arrays object angular typescript observable

我正在使用 TypeScript 学习 Angular 2。到目前为止,我已经编写了一些API 服务,它使用HTTP get 方法通过可观察对象向我提供json 数据。一切正常,我可以在我的 View 中使用数据,我也可以在我的组件中使用数据,但仅当我订阅 getData() 方法时。


为什么会这样?我还有哪些其他可能性可以使对象数组对我的组件中的所有方法可用,以便于迭代和管理?

示例组件:

export class SomeComponent implements OnInit {

  public someData: DataObject[];

  public constructor(private service: SomeService) {}

  public ngOnInit(): void {
    this.loadData();
    this.useData();
  }

  private loadData(): void {
    this.service.getData().subscribe(data=> {
      this.someData = data;

      this.someData.forEach(dataObject => {
        // this works fine
      });
    });
  }

  private useData(): void {
    this.someData.forEach(dataObject => {
      // dataObject is (of type?) undefined, why?
    });
  }

}

最佳答案

这是因为 http 调用是异步的。您的 this.useData(); 不会等待 this.loadData(); 完成。这应该有效:

  private loadData(): void {
    this.service.getData().subscribe(data=> {
      this.someData = data;

      this.useData();
    });
  }

关于arrays - Angular 2 TS对象数组仅在订阅服务时定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40342218/

相关文章:

c# - 从字节数组数据中获取图像的宽度和高度

javascript - AngularJS:通过匹配不同的属性来获取数组中的对象属性?

javascript - 如何根据选择的选项获得对象?

javascript - 如何使用JAX-RS在REST中将Javascript日期传递给Java LocalDate和LocalDateTime

angular - 如何将组件导入 Angular 中的服务类

javascript - 如何在 webpack 的生产版本中引用 Web Workers?

c - 用C读取文件并将数据存储在数组中

java - ArrayList 中的继承和对象

java - 通过创建对象为其他类的数组赋值

c - 动态数组是在没有 malloc 的情况下分配的