【问题标题】:how to assign response data of api get request in angular如何以角度分配api获取请求的响应数据
【发布时间】:2021-10-25 10:09:31
【问题描述】:

我正在向 api 端点发出 get 请求,它发送一个 json 对象,我想要来自数据属性的课程数组。但我不能,不知道我做错了什么,应该将 json 转换为对象…… 错误是 “对象”类型上不存在属性“键”。

这里的key应该等于“data”,data是json的属性。

我的组件是

import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { pipe } from 'rxjs';
import { map } from 'rxjs/operators'
import { C } from './c.model';

@Component({
  selector: 'app-course',
  templateUrl: './course.component.html',
  styleUrls: ['./course.component.css']
})
export class CourseComponent implements OnInit {
 courses :C[]=[];
  constructor(private http:HttpClient) { }

  ngOnInit(): void {
    this.fetchCourses();
  }

  private fetchCourses() {
    this.http.get('http://127.0.0.1:3000/api/courses/')
    .pipe(map( responseData =>{
      const coursesArray = [];
        for(const key in responseData){
          if(responseData.hasOwnProperty(key)){
             if(key === "data")
             {
               coursesArray.push(...(responseData.key.courses))
             }
          }
        }
        return coursesArray
      }))
    .subscribe(responsec=>{
      this.courses=responsec;
    })
  }

}

来自api的json

{
    "status": "sucess",
    "numberOFResults": 5,
    "data": {
        "courses": [
            {
                "images": [],
                "tutors": [],
                "_id": "611c8899e135aa2c9cd39796",
                
          
            },
            {
                "images": [],
                "tutors": [],
                "_id": "611c8899e135aa2c9cd39794",
                "name": "arduno uno",
                
            },
            {
                "images": [],
                "tutors": [],
                "_id": "611c8899e135aa2c9cd39795",
                "name": "c/c++",
                "duration": 8,
                
            },
            {
                "images": [],
                "tutors": [],
                "_id": "611c8899e135aa2c9cd39798",
                "name": "ms office",
                "duration": 4,
               
            },
            {
                "images": [],
                "tutors": [],
                "_id": "611c8899e135aa2c9cd39797",
                "name": "web development",
                
            }
        ]
    }
}

【问题讨论】:

  • 从您的回复结构中,您可以直接访问responseData.data.courses等课程。

标签: angular api get xmlhttprequest


【解决方案1】:

key 这里是字符串类型,您正在使用 . (点)。您需要使用方括号 [] 语法访问它。

改变这个

coursesArray.push(...(responseData.key.courses))

coursesArray.push(...((responseData as any)[key].courses))

【讨论】:

  • 是的,它正在工作。但是之前的问题是什么??
  • 您正在使用 . (dot) 且key为string类型,在key为string的情况下,我们需要使用[]括号语法来访问对象属性。
  • 没问题,如果它解决了你的问题,考虑投票/接受答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多