循环遍历对象Ionic3 / Angular4

And*_*ini 2 json angular

我正在尝试遍历内容。我尝试了一些在StackOverflow中找到的答案,但没有一个适合我。

我有这个JSON

{  
   "-KmdNgomUUnfV8fkzne_":{  
      "name":"Abastecimento"
   },
   "-KmdNgzguGKbCEfyQ3F0":{  
      "name":"Consórcios"
   },
   "-KmdNh9_jtBlFqY1Y_Rj":{  
      "name":"Consultoria aeronáutica"
   },
   "-KmdNhKNCVEiJ2Ou8bUV":{  
      "name":"Cursos e treinamentos"
   },
   "-KmdNhVRoKfaCM--304M":{  
      "name":"Financiamento"
   },
   "-KmdNhfIC6fA0kDJcVBq":{  
      "name":"Hangaragem"
   },
   "-KmdNhu0X-PteQMyHp_n":{  
      "name":"Mecânica"
   },
   "-KmdNi6ZmmYXnoOTXoC5":{  
      "name":"Táxi Aéreo"
   },
   "-KmdNiHFhiX_crXB1L2R":{  
      "name":"Outros"
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试循环使用此代码

<button ion-item *ngFor="let cat of subcategories" (click)="onSubcategorySelect(cat)">
              {{ cat.name }} 
</button>
Run Code Online (Sandbox Code Playgroud)

没用 我究竟做错了什么?

Gab*_*eto 5

Angular ng-for要求具有Iterable接口的任何元素都可以工作,而普通Object并非如此。您需要在数组中“转换”该对象,更简单的方法是使用with forEachfor/in循环:

在代码中的任何位置,您都将遍历对象,并将其保存在新变量中以用于ngFor

public newSubcategories: any[] = []; // DECLARE A NEW EMPTY ARRAY IN THE TOP OF YOUR CLASS

this.subcategories.forEach(item => {
  this.newSubcategories.push(a);
});
Run Code Online (Sandbox Code Playgroud)

如果您需要维护密钥,请使用密钥for/in来推送新对象。

public newSubcategories: any[] = []; // DECLARE A NEW EMPTY ARRAY IN THE TOP OF YOUR CLASS

for(let key in this.subcategories){
  this.newSubcategories.push({
    key: key,
    name: this.subcategories[key].name
  });
}
Run Code Online (Sandbox Code Playgroud)

最后你的HTML

<button ion-item *ngFor="let cat of newSubcategories" (click)="onSubcategorySelect(cat)">
  {{ cat.name }} 
</button>
Run Code Online (Sandbox Code Playgroud)

有了这个,您将可以ng-for在新阵列中使用。

希望这可以帮助。