代码之家  ›  专栏  ›  技术社区  ›  Angulandy2

Angular2获取JSON数据并将其定义为组件中的新数组

  •  0
  • Angulandy2  · 技术社区  · 6 年前

    我得到了我的JSON文件,我正在服务中得到它。然后我尝试在组件中订阅它,但是 console.log(this.jsonObj) 我得到空数组。如果我写 console.log(data) -我得到JSON数据。

    服务:

    objUrl = 'assets/jsons/obs.json';
    constructor(private http: HttpClient) {
      console.log('Hello ObjectsProvider Provider');
    }
    getObjectsJson() {
      return this.http.get(this.objUrl);
    }
    

    组件:

    jsonObj = {};
    this.object.getObjectsJson().subscribe((data =>
      this.jsonObj = data
    ))
    console.log(this.jsonObj)
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Sunil Singh    6 年前

    问题

    你想得到 Asynchronous 数据在 Synchronous 时尚。您正在记录数据 console.log(this.jsonObj) 在可观测范围之外。因此,它将在不等待来自API的结果的情况下执行。

    固定

    只需移动日志或任何要在内部执行after API的代码 subscribe . 所以你的代码看起来

    jsonObj = [];
    this.object.getObjectsJson().subscribe((data =>
      this.jsonObj = data;
      console.log(this.jsonObj);  //<-- data will be appear here.
    ))
    
        2
  •  0
  •   GreyBeardedGeek    6 年前

    服务方法是异步的,因此当HTTP调用返回时,subscribe()(进行赋值)中的代码将在将来某个时间执行。您的日志语句在订阅之外,因此它发生在分配之前。尝试在分配之后将LOG语句放入订阅中。

        3
  •  0
  •   Skandar B.A    6 年前

    console.log(this.jsonobj)将在服务器响应之前运行。你可以按原样处理它。它会运行得很好。你可以这样测试它

    <p *ngIf="jsonObj !== undefined">{{jsonObj.field}}</p>
    

    如果您想用console.log检查它,只需像这样将它添加到订阅中即可。

    this.http.getObjectsJson().subscribe((data => {
          this.jsonObj = data
          console.log(this.jsonObj)
        }));"