【问题标题】:looping through response object angular循环通过响应对象角度
【发布时间】:2020-03-31 16:33:03
【问题描述】:

我正在尝试遍历一个数组,该数组包含一些我想呈现给用户的值。我在用角度提取这些值时遇到了一些困难。我不确定我做错了什么。我收到了回复,所以我知道请求正在返回,但是我似乎无法访问或循环遍历数组的各个部分。

c#代码:

 [EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
public class MapController : ApiController
{
    Map[] map = new Map[]
    {
        new Map { Map_Data_ID = 122, County = "West Yorkshire", Color = "#d45faa"},
        new Map { Map_Data_ID = 122, County = "West Yorkshire", Color = "#d45faa"},
    };

    public IEnumerable<Map> GetAllProducts()
    {
        return map;
    }
}

角度:

test: Array<{id: Number, value: string, color: string}> = [];

getMapData() {     
       this._interactiveMapService.getMapData()
          .subscribe(
              data => {
                  var arr = Object.keys(data).map(key => ({type: key, value: data[key]}));
                  for(var i; i < arr.length; i++) {
                    this.test.push({id: i.Map_Data_ID, value: i.County, color: i.Color});
                  }
              })
    }

这也是我想附加的响应数据

例子:

 this.dataSource = {
      chart: {
        caption: "Depot Locations",
        subcaption: "United Kingdom (Counties)",
        numbersuffix: "%",
        includevalueinlabels: "1",
        labelsepchar: ": ",
        entityFillHoverColor: "#FFF000",
        theme: "fint",
      },   
      // Source data as JSON --> id represents counties of england.
      data: [
        {
          id: "126",
          value: "Anglesey",       
          color: "#d45faa"
        },
        {
          id: "108",
          value: "Argyl & Bute",          
          color: "#d45faa"
        }
      ]
    }

来自服务器的示例响应:

[
    {
        "Map_Data_ID": 122,
        "County": "West Yorkshire",
        "Color": "#d45faa"
    },
    {
        "Map_Data_ID": 167,
        "County": "Wiltshire",
        "Color": "#d45faa"
    }
]

【问题讨论】:

  • 角度响应是什么样的,即console.log(data) 返回什么?
  • i in this.test.push({id: i.Map_Data_ID, value: i.County, color: i.Color}) 是一个循环控制变量。这意味着它将具有值:0、1、2.... 它不是一个对象。
  • 当我尝试访问部分响应(如 data.Color)时,我没有收到智能感知建议。我需要访问数组中的每个值。

标签: c# arrays angular typescript loops


【解决方案1】:

假设响应格式如下:

data =  [ { "Map_Data_ID": 122, "County": "West Yorkshire", "Color": "#d45faa" }, { "Map_Data_ID": 167, "County": "Wiltshire", "Color": "#d45faa" } ];

你可以这样做

.subscribe(data => {
  this.data.forEach(e => {
    this.test.push({
      id: e.Map_Data_ID,
      value: e.County,
      color: e.Color
    })
  })
});

由于我们处于打字稿的世界,我们可以定义一个类来保存这些数据并使我们的生活更轻松。

export class CountryDetails {
  constructor(
    private id: number,
    private value: string,
    private color: string
  ) {}
}

现在使用新创建的类:

.subscribe(data => {
  this.data.forEach(e => {
    this.test.push(new CountryDetails(e.Map_Data_ID, e.County, e.Color));
  })
});

【讨论】:

  • 我知道了 [ { "Map_Data_ID": 122, "County": "West Yorkshire", "Color": "#d45faa" }, { "Map_Data_ID": 167, "County": "威尔特郡”,“颜色”:“#d45faa”}]
  • 我认为的问题是该集合没有附加名称
  • 好的.. 那么你期望的输出是什么?
  • 可能这个数据 = [ { "Map_Data_ID": 122, "County": "West Yorkshire", "Color": "#d45faa" }, { "Map_Data_ID": 167, "County": “威尔特郡”、“颜色”:“#d45faa”}]
  • 我的意思是数据有点无关紧要,我更感兴趣的是遍历内容并将值分配给我的数组。我想访问 data.color 等元素
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 2019-02-07
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多