如何从JSON中读取数据并将其绑定到Angular 2+中的Select下拉列表

时间:2018-09-19 03:05:11

标签: json angular typescript api

这是我的JSON的样子:

{
    "Stations": {
        "44": {
            "NAME": "Station 1",
            "BRANCH_CD": "3",
            "BRANCH": "Bay Branch"
        },
        "137": {
            "NAME": "Station 2",            
            "BRANCH_CD": "5",
            "BRANCH": "Beach Branch"        
        }
    }
}

我想知道是否有可能从每个“站”中提取“名称”和“分支”值并将它们绑定到单独的选择输入[下拉列表]

我正在使用Angular 4。 这是我所拥有的:

 this.apiService.getStations().subscribe(data => {
      this.stationList = data.Stations;
     }, err => {
      this.errorFetchingStations = err;
      console.log("Error getting list of stations " + err);
    })

this.stationList在控制台中给了我这种格式的对象:

{44:{NAME: "Name of station", BRANCH: "Name of branch"}}
{137:{NAME: "Name of station", BRANCH: "Name of branch"}}

以此类推。

如果我尝试将stationList这样绑定到我的选择,则会收到错误消息

错误错误:尝试与'[object Object]'进行比较时出错。仅允许数组和可迭代项

    <select class="form-control">
        <option *ngFor="let station of stationList" [value]="station.NAME">{{station.NAME}}</option>
      </select>

2 个答案:

答案 0 :(得分:1)

您将对象具有键值对,而ngFor需要一个数组,因此您应使用以下代码

 this.apiService.getStations().subscribe(data => {
      this.stationList = Object.values(data.Stations); // returns an array
     }, err => {
      this.errorFetchingStations = err;
      console.log("Error getting list of stations " + err);
    })

答案 1 :(得分:1)

您应该将stationList转换为数组,然后可以使用Object.values(data.Stations),如下所示。

this.apiService.getStations().subscribe(data => {
  var stations = data.Stations;
  this.stationList = Object.values(stations);
}, err => {
  this.errorFetchingStations = err;
  console.log("Error getting list of stations " + err);
})