【问题标题】:Get specific fields from the data returned from the http.get() call in angular从 angular 中的 http.get() 调用返回的数据中获取特定字段
【发布时间】:2020-11-01 18:18:22
【问题描述】:

get 调用返回以下数据

{"status":"success","data":[{"id":"1","employee_name":"Tiger Nixon","employee_salary":"320800","employee_age":"61","profile_image":""},{"id":"2","employee_name":"Garrett Winters","employee_salary":"170750","employee_age":"63","profile_image":""},{"id":"3","employee_name":"Ashton Cox","employee_salary":"86000","employee_age":"66","profile_image":""},{"id":"4","employee_name":"Cedric Kelly","employee_salary":"433060","employee_age":"22","profile_image":""},{"id":"5","employee_name":"Airi Satou","employee_salary":"162700","employee_age":"33","profile_image":""},{"id":"6","employee_name":"Brielle Williamson","employee_salary":"372000","employee_age":"61","profile_image":""},{"id":"7","employee_name":"Herrod Chandler","employee_salary":"137500","employee_age":"59","profile_image":""},{"id":"8","employee_name":"Rhona Davidson","employee_salary":"327900","employee_age":"55","profile_image":""},{"id":"9","employee_name":"Colleen Hurst","employee_salary":"205500","employee_age":"39","profile_image":""},{"id":"10","employee_name":"Sonya Frost","employee_salary":"103600","employee_age":"23","profile_image":""},{"id":"11","employee_name":"Jena Gaines","employee_salary":"90560","employee_age":"30","profile_image":""},{"id":"12","employee_name":"Quinn Flynn","employee_salary":"342000","employee_age":"22","profile_image":""},{"id":"13","employee_name":"Charde Marshall","employee_salary":"470600","employee_age":"36","profile_image":""},{"id":"14","employee_name":"Haley Kennedy","employee_salary":"313500","employee_age":"43","profile_image":""},{"id":"15","employee_name":"Tatyana Fitzpatrick","employee_salary":"385750","employee_age":"19","profile_image":""},{"id":"16","employee_name":"Michael Silva","employee_salary":"198500","employee_age":"66","profile_image":""},{"id":"17","employee_name":"Paul Byrd","employee_salary":"725000","employee_age":"64","profile_image":""},{"id":"18","employee_name":"Gloria Little","employee_salary":"237500","employee_age":"59","profile_image":""},{"id":"19","employee_name":"Bradley Greer","employee_salary":"132000","employee_age":"41","profile_image":""},{"id":"20","employee_name":"Dai Rios","employee_salary":"217500","employee_age":"35","profile_image":""},{"id":"21","employee_name":"Jenette Caldwell","employee_salary":"345000","employee_age":"30","profile_image":""},{"id":"22","employee_name":"Yuri Berry","employee_salary":"675000","employee_age":"40","profile_image":""},{"id":"23","employee_name":"Caesar Vance","employee_salary":"106450","employee_age":"21","profile_image":""},{"id":"24","employee_name":"Doris Wilder","employee_salary":"85600","employee_age":"23","profile_image":""}]}

当我从 subscribe 返回数据时,我试图获取数据,然后只从中获取employee_age 和employee_name

this.service.getEmployee().subscribe((data)=>this.employees = data)

控制台中出现错误错误:找不到类型为“object”的不同支持对象“[object Object]”。 NgFor 只支持绑定到 Arrays 等 Iterables。

应该是什么方法,我正在学习角度,请帮助,我如何才能从中获取年龄和姓名

【问题讨论】:

  • 这能回答你的问题吗? How to iterate object keys using *ngFor
  • 我有状态和数据,我首先需要只获取数据,然后在组件本身中从中命名和年龄以进行某些操作@Edric

标签: angular


【解决方案1】:

请注意 JSON 数据的格式,它基本上是一个有两个键的对象,“状态”是字符串,“数据”是数组。

话虽如此,如果您只想获取结果的“数据”部分,则必须像这样修改订阅代码

this.service.getEmployee().subscribe((res)=>this.employees = res.data)

例如,如果您想将服务获取的 json 修改为您选择的不同格式,您有 ma​​p rxjs 运算符,它可以将您的数据从一种格式转换为另一种格式,

例如,如果您的员工数组由只有两个字段 employee_ageemploye_name 的对象组成,您可以像这样映射结果

    this.service.getEmployee().pipe(map(res=>{
let employeeArr: Employee[] = [];
res.data.forEach(x=>{
    let employeeObj: Employee=new Employee();
    employeeObj.employee_age = x.employee_age;
    employeeObj.employee_name = x.employee.name;

    employeeArr.push(employeeObj);
});
return employeeArr;
}).subscribe((res)=>this.employees = res);

所以基本上我们已经将我们的响应转换为另一种格式。

谢谢。

【讨论】:

  • 我已经尝试过了,只是为了获取 @Obaid 类型上不存在属性“数据”
  • 请参考更新后的答案。如果您显示对象 this.employees 的格式,那也很棒。谢谢。
  • 员工是类还是接口,因为您无法创建接口@Obaid 的对象,感谢领导我完成了它,而不是 res.employee_age 需要做 x.employee_age 并且我移动了逻辑到一个单独的函数并在地图中调用函数
  • 这只是一个例子,我假设它是一个类......你可以有一个接口......在这种情况下,你不会使用 new 关键字,而是用大括号实例化对象,例如让员工:员工={员工年龄:res.remployee_age} ...
  • const employeeObj = {} as Employee; @Obaid
猜你喜欢
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 2014-11-22
相关资源
最近更新 更多