我在角度方面遇到了奇怪的行为。
我正在尝试遍历将从Web服务返回的嵌套json对象。
以下是我的网络服务
@CrossOrigin
@RequestMapping(value="service/admin/getPageComponents",method=RequestMethod.POST,headers="Accept=application/json")
public ResponseData getPageComponents(@RequestParam Map<String, String> reqMap){
Address addressp=new Address("Uni", "Tatooine");
Student a=new Student("LukeSkywalker", "34", addressp);
List<Student> li=new ArrayList<>();
li.add(a);
List<String> h=new ArrayList<>();
h.add("name");
h.add("age");
h.add("add.city");
return new ResponseData(li, h);
}
我只想打印学生的姓名,年龄和城市数据。因此,我将单独传递标题数据。
在我的打字稿方面,我将我的学生列表映射到tableData的列和标题列表到tableData的标题。
以下是我在html中访问此内容的方式,
<tr *ngFor="#column of tableData.columns " (click)="onRowSelect(column)" highlight>
<td *ngFor="#key of tableData.header" >{{getText(column,key)}}</td>
</tr>
在我的Typescript类中,
getText(column,key:string){
console.log(key+" : "+column[key]);
if(key.indexOf(".")!=-1){
var firstKey = key.substring(0, key.indexOf("."));
var remainingKey=key.substring( key.indexOf(".")+1,key.length);
let jsonObj:any=column[firstKey];
console.log('|| '+firstKey+' || '+remainingKey+' || '+jsonObj)
this.getText(jsonObj,remainingKey);
// below code works as expected
/*
let arr=key.split(".");
let jsonO:any=column[arr[0]];
return jsonO[arr[1]];*/
}else{
console.log("returning "+column[key]);
return column[key];
}
}
当我取消注释非recurssion部分并对recurrsion进行评论时,代码按预期工作,我在我所在城市的专栏中获得了“Uni”。
然而,当我使用recurssion部分时,我能够在console.log中看到数据但在页面上没有。该列是空白的。
有人可以告诉我我做错了什么吗?
由于
答案 0 :(得分:1)
我建议你在递归调用中添加return
:
getText(column,key:string){
if(key.indexOf(".")!=-1){
...
return this.getText(jsonObj,remainingKey); // Right here
} else {
return column[key];
}
}