文章内容
2020/6/23 14:15:18,作 者: 黄兵
Angular json遍历
最近再使用Angular的时候,后端返回了一个复杂的数组,具体内容如下:
var temp_array = [{
'parent': {
'child': {'link': '/help/why_some_numbers_disappear', 'title': 'Why some numbers disappear'},
'title': 'Phone Number'
}
},
{
'parent': {
'child': {
'link': '/help/why_some_numbers_disappear',
'title': 'Why sometimes website access is slow'
},
'title': 'WebSite'
}
}]这个数组解析第一层没有问题,具体代码如下:
<article class="page no-article-survey content-width">
<mat-accordion>
<mat-expansion-panel *ngFor="let item of result">
<mat-expansion-panel-header>
<mat-panel-title>
{{item.parent.title}}
</mat-panel-title>
</mat-expansion-panel-header>
<div class="overflow">
<div class="children">
<div class="child" *ngFor="let childItem of item.parent.child">
<a [routerLink]="[childItem.link]">{{childItem.title}}</a>
</div>
</div>
</div>
</mat-expansion-panel>
</mat-accordion>
</article>
但是子数据,会存在[object,object]的情况。导致无法解析:

具体循环代码如下:
for(let item of temp_array){
for(let childItem of item.parent.child){
console.log(childItem);
}
}
最后修改代码,如下:
//called with every property and its value
function process(key, value) {
console.log(key + " :" + value);
}
function traverse(o, func) {
for (var i in o) {
func.apply(this, [i, o[i]]);
if (o[i] !== null && typeof (o[i]) == "object") {
//going one step down in the object tree!!
traverse(o[i], func);
}
}
}
//that's all... no magic, no bloated framework
traverse(temp_array, process);
运行结果:

但是再Angular 还是不好操作,只能修改后端代码,将child节点变成一个数组,具体数据如下:
var temp_array = [{'parent': {
'child': [{'link': '/help/why_some_numbers_disappear', 'title': 'Why some numbers disappear'}],
'title': 'Phone Number'}
}, {'parent': {
'child': [{'link': '/help/why_some_numbers_disappear', 'title': 'Why sometimes website access is slow'}],
'title': 'WebSite'}
}]之后就可以循环遍历了。
代码如下:
<article class="page no-article-survey content-width">
<mat-accordion>
<mat-expansion-panel *ngFor="let item of result">
<mat-expansion-panel-header>
<mat-panel-title>
{{item.parent.title}}
</mat-panel-title>
</mat-expansion-panel-header>
<div class="overflow">
<div class="children">
<div class="child" *ngFor="let childItem of item.parent.child">
<a [routerLink]="[childItem.link]">{{childItem.title}}</a>
</div>
</div>
</div>
</mat-expansion-panel>
</mat-accordion>
</article>
参考资料:
评论列表