Javascript 从api调用通过服务返回到组件的数据是一个对象,并且似乎需要是一个数组

Javascript 从api调用通过服务返回到组件的数据是一个对象,并且似乎需要是一个数组,javascript,arrays,json,angular,observable,Javascript,Arrays,Json,Angular,Observable,我有返回给我的数据,工作正常 工作数据是 数据:数组(16) 不起作用的数据是这样的 .map((response: Response) => { return response; data:Menu1Items:Array(5)>0{..}等 我使用的是Angular 5,所以服务返回的数据如下 .map((response: Response) => { return response; 然后组件拦截它,console.

我有返回给我的数据,工作正常

工作数据是

数据:数组(16)

不起作用的数据是这样的

  .map((response: Response) => {
            return response;
data:Menu1Items:Array(5)>0{..}等

我使用的是Angular 5,所以服务返回的数据如下

  .map((response: Response) => {
            return response;
然后组件拦截它,console.log工作正常

this.arsSevice.getMenu()
        .subscribe(
            result => {
                this.testing = result; 
                console.log('menu',result);
            })
问题在于数据,这个屏幕截图显示了问题所在,我只是不知道如何用object vs array解决它

仅因HTML模板而显示错误消息

找不到类型为“object”的不同支持对象“[object object]”。NgFor仅支持绑定到数组之类的可重用项。

HTML模板

<li *ngFor="let item of testing">

图中显示了一个在体系结构上与html模板循环、组件、服务类似的调用工作调用位于底部,
component
注意到与我遇到问题的名为
menu
的调用不同吗


我认为您需要设置testing=result.data,然后迭代

this.arsSevice.getMenu()
        .subscribe(
            result => {
                this.testing = result.data; 

            })
这将允许您访问“数据”中的数组

我试图改变数据的形状,这对我来说很有效。希望它对你有用

var data={
      menu1Items:[{key:"boo", key2:"hoo"}],
      menu2Items:[{key:"boo2", key2:"hoo2"}]
    }
    var tempData:any[]=[];
    for(var key in data){
      if(data.hasOwnProperty(key)){
        tempData.push(data[key]);
      }
    }
    this.data = tempData;
}
在模板中:

<ul *ngFor="let menu of data ">
  <li>
      <ng-container *ngFor="let menuItem of menu">
          {{menuItem.key}} / {{ menuItem.key2}}       
      </ng-container>
  </li>
</ul>

  • {{menuItem.key}/{{menuItem.key2}

  • 使用HttpClient angular自动将响应解析为对象。它不知道这是什么类型的对象,所以它只是一个不知道其数组属性的普通对象

    这是因为当HttpClient将JSON响应解析为一个对象时,它不知道该对象是什么形状

    但是你可以告诉angular返回的对象是什么类型的,这样它就可以被正确地投射。例如,如果你得到一个字符串数组,你可以这样做

    return this.http.get<string[]>(apiUrl)
    
    返回此.http.get(apirl)
    

    你可以阅读更多,他们描述了一个类似的问题,只是结构有点不同

    不,是我干的,运气不好。数据不同,请注意屏幕截图。正在工作的服务/组件在一个数组中有数据,但是看看我在菜单中得到的数据……GetMenu是与“工作数组”不同的调用,还是相同的调用?为什么一个状态为“失败”,另一个状态为成功?菜单项也是对象数组,因此您还需要遍历每个菜单数组。你试过两个循环吗?@Farasi78在谷歌搜索时绊倒在这里。我和那个问这个问题的人有一个相似的问题。我有一个需要迭代的对象数组。我现在不在我的代码前面,我需要带着我的代码回到我的电脑,然后发布一个我猜是的问题。想知道如何在每个数组上真正循环的角度代码的示例吗?你能举个例子吗?这对我很有效。我做了一些像
    客户:任何
    then customers=result.data[“customers”]您的数据如何可能更改?你必须在某个地方修改它,请提供重现该问题所需的所有代码,或者更好的是,创建一个演示该问题的示例。他似乎(我想)展示了一个1的示例(我假设是另一个调用),一个不起作用的示例-当然解释得不是很好,但我无意中发现了这一点,选择的答案确实帮助了我。