json - 嵌套 HTTP 调用 Angular 4

标签 json angular http typescript

我试图获取 json 格式的响应,其中包含每个声明以及其中的用户和类别的数组。我已将其静态固定,但我想使其动态化,但似乎无法使其工作。

编辑: 我在方法中静态插入“id”,因此我只得到一个声明。我想创建某种循环,在其中我可以取回 http://localhost:8080/declaraties 上的所有声明。我已经尝试过嵌套 http 但没有成功。

代码:

数据.service.ts

    import { Injectable } from '@angular/core';
    import {Http} from '@angular/http';
    import {Observable} from 'rxjs/Observable';
    import 'rxjs/add/observable/forkJoin';
    import 'rxjs/add/observable/of';
    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/mergeMap';

@Injectable()
export class DataService {

  constructor(private http: Http) { }

  url = 'http://localhost:8080/declaraties/';

  getAllesVanDeclaraties(id: number): Observable<any> {
    return Observable.forkJoin([
      this.http.get('http://localhost:8080/declaraties/' + id).map(res => res.json()),
      this.http.get('http://localhost:8080/declaraties/' + id + '/gebruiker').map(res => res.json()),
      this.http.get('http://localhost:8080/declaraties/' + id + '/categorie').map(res => res.json())
    ])
      .map((data: any[]) => {
          const declaraties: any = data[0];
          const gebruiker: any[] = data[1];
          const categorie: any[] = data[2];
          declaraties.gebruiker = gebruiker;
          declaraties.categorie = categorie;
          return declaraties;
      });
  }
}

row.component.html

<ng-container *ngFor="let decl of data; let i = index;">

    <tr data-toggle="collapse" data-target="#demo1" class="accordion-toggle">
      <th>{{i + 1}}</th>

      <td>{{decl['gebruiker'].naam}}</td>
      <td>{{decl.datumIngediend}}</td>
      <td>{{decl.omschrijving}}</td>
      <td>{{decl['categorie'].naam}}</td>
      <td>&euro; {{decl.bedrag}}</td>

    </tr>......

行.组件.ts

import {Component, OnInit} from '@angular/core';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';
import {DataService} from './data.service';

@Component({
  selector: 'app-row',
  templateUrl: './row.component.html',
  styleUrls: ['./app.component.css']
})

export class RowComponent implements OnInit {

  data: any = [];

  constructor(private dataService: DataService) {
  }

  ngOnInit() {
    this.dataService.getAllesVanDeclaraties(2).subscribe( data => {
      console.log(data);
      this.data.push(data);
    });
  }
}

我尝试发出嵌套的 http 请求,但没有收到任何响应。

最佳答案

尝试这样:

Observable.forkJoin([
    this.http.get('http://localhost:8080/declaraties/' + id),
    this.http.get('http://localhost:8080/declaraties/' + id + '/gebruiker'),
    this.http.get('http://localhost:8080/declaraties/' + id + '/categorie')
])
.subscribe((data: any) => {
    console.log('data[0]', data[0].json())
    console.log('data[1]', data[1].json())
    console.log('data[2]', data[2].json())
})

关于json - 嵌套 HTTP 调用 Angular 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47595186/

相关文章:

Javascript 过滤器非数组 JSON 对象

arrays - 使 JSON 响应符合结构和数组 Swift

android - 将 JSON 转换为游标

javascript - 如何在模板中使用异步命令显示数据?

angular - 无论使用 ActivatedRoute 的路由嵌套级别如何,都在 Angular2 路由上检索数据属性

http - 通过 Drive API 从 URL 上传图片

java - 从 Java Google Cloud 创建启用 HTTP 的实例

java - Java读取JSON二维数组

angular - 如何设置 Angular Material 选项卡的样式?

php - 来自特定国家/地区的 Chrome 中的 wordpress err_connection_reset