我对在angular2中使用数组的概念完全陌生。我的JSON数据来自后端,我将其存储在一个名为“arr”的数组中。但我想访问一个存在于每个“arr”对象中的数组,即“arr”中的每个对象都有一个数组,其中包含一些元素。我想在我的.ts文件中访问该数组而不是HTML文件。我需要在.ts文件中对它进行一些修改,所以我想知道如何为它创建一个管道。
我读到我们需要使用pipes.But我不明白我该如何使用管道。 如果你可以在图片中看到有一个主数组,它有3个对象,并且3个对象中的每一个都有一个名为categories的数组,它们也有对象。我想访问主数组中存在的所有3个对象的类别内的字段“类别”。有人可以帮我做吗?
答案 0 :(得分:1)
如果是html
<div *ngFor="let item of arr">
{{item.aliasname}}
<div *ngFor="let category of item.categories">
{{category.name}}
</div>
</div>
在类型脚本中,您可以使用foreach循环
arr.forEach(element => {
element.forEach(category => {
console.log(category.name);
// Do whatever you want
// You can access any field like that : category.yourField
});
});
答案 1 :(得分:1)
此处不需要管道,管道将用于在模板中实际显示数据,例如,如果您需要迭代不能与*ngFor
一起使用的对象键。但是因为你想操纵组件中的数据....
您需要两个forEaches
来覆盖不同对象中的每个类别。您需要在收到数据后通过回调(订阅)执行此操作,此处还有更多信息:How do I return the response from an Observable/http/async call in angular2?
我建议您在服务中执行http请求,并订阅组件中的数据,因此在组件中,调用该服务方法并订阅响应,然后使用forEach:
ngOnInit() {
this.service.getData()
.subscribe(data => {
this.searchResults = data;
// call method or manipulate data here since response has been received
this.manipulateData();
});
}
manipulateData() {
this.searchResults.forEach((x:any)=> { // iterate outer array
x.categories.forEach((y:any) => { // iterate the categories of each object
console.log(y.name) // ... or whatever properties you have
// manipulate your data
})
})
}