Javascript 如何在angular 2中迭代此json响应
我从一个服务得到以下响应,其中包括json模式格式的表单定义 现在我想在角度分量中迭代这个响应 因此,我在一个Formdata变量中获取了所有类似的模式元素Javascript 如何在angular 2中迭代此json响应,javascript,json,angular,Javascript,Json,Angular,我从一个服务得到以下响应,其中包括json模式格式的表单定义 现在我想在角度分量中迭代这个响应 因此,我在一个Formdata变量中获取了所有类似的模式元素 res['tabs'].forEach(element => { this.tablist.push(element); }); this.tablist.forEach(element => { this.F
res['tabs'].forEach(element => {
this.tablist.push(element);
});
this.tablist.forEach(element => {
this.FormData[element] = res['com'][element]['schema'];
this.FormValueData[element] = res['com'][element]['data'];
this.FetchValueParam[element] = res['com'][element]['data'];
});
现在我想在side a视图中访问Formdata的值,并为此编写了以下代码
<form>
<div *ngFor='let input1 of FormData[element]['properties']'>
<label [for]='input1.type'> input1.title</label>
<input type='input1.type' [name]='input1.title'
[placeholder]='something'>
<br>
</div>
<br><br>
<button type="submit"> Submit </button>
</form>
更新:当我使用像这样的伪json对象时。我正在得到期望的结果。所以我得到的是,ngFor预期的类型和我作为json对象提供的类型之间存在严重的不匹配
this.inputfield=
[{type:'email',name:'email',value:'',placeholder:"your email here"},
{type:'email',name:'email',value:'',placeholder:'your email
here'},{type:'email',name:'email',value:'',placeholder:'your
email here'},
{type:'email',name:'email',value:'',placeholder:'your email
here'},{type:'email',name:'email',value:'',placeholder:'your
email here'},
{type:'email',name:'email',value:'',placeholder:'your email
here'},{type:'email',name:'email',value:'',placeholder:'your
email here'},
{type:'email',name:'email',value:'',placeholder:'your email
here'},{type:'email',name:'email',value:'',placeholder:'your
email
here'}{type:'email',name:'email',value:'',placeholder:'your
email here'}];
当我在json模式验证器中检查两者之间的差异时,
我在控制台中显示的前一个是作为对象出现的,但上面显示的是数组
所以要么发送数组而不是对象,要么在运行时基于上述json模式创建一个数组或类。做什么更好 假设this.tablist是一个字符串数组,您可以将在此.FormData[element]中创建的对象更改为数组:
this.tablist.forEach(element => {
Object.keys(res['com'][element]['schema']['properties']).forEach(inputKey => {
this.FormData[element] = [];
this.FormData[element].push(res['com'][element]['schema']['properties'][inputKey]);
}
this.FormValueData[element] = res['com'][element]['data'];
this.FetchValueParam[element] = res['com'][element]['data'];
});
然后在模板中使用它,如下所示
此外,您没有在此行中使用属性绑定权限(即如果组件中没有名为某物的变量):
[占位符]='something'>
应该是
[placeholder]=“something”>
JSON响应不是数组,它是一个巨大的对象,您正在尝试遍历“properties”对象。你不能这样做,好吧,那么如何将其转换为数组?有什么方法可以直接执行吗???在服务器端获取属性对象时,可以将其转换为数组吗?为什么需要将其转换为数组?正如我从那张图片中看到的(发布图片不是一个好主意),没有重复,你不需要循环浏览,你可以这样访问它:FormData[element][properties'].accountcatalogid.title,FormData[element][properties'].bankaccountname.title
等。如果属性是映射,则需要找到遍历映射的方法:当我应用上述更改时。控制台显示“_this.FormData[element].properties.push不是函数”您可以在forEach函数下面声明它:this.FormData[element]['properties']=[]
当我尝试此操作时。FormData[element]['properties']=[];它说不能在未定义的上设置“属性”。当我删除[element]并访问这个.FormData['properties']中的数据时,它起了作用。但我需要确定[元素]。我错过了什么?我离我想要实现的目标只有一步之遥。我真的不知道为什么我会按照你的建议这样做;它显示了一个错误,这里定义了“不能在未定义的元素上设置'properties',我可以在控制台中获得它。我很高兴,您能将我的答案标记为正确吗?
this.tablist.forEach(element => {
Object.keys(res['com'][element]['schema']['properties']).forEach(inputKey => {
this.FormData[element] = [];
this.FormData[element].push(res['com'][element]['schema']['properties'][inputKey]);
}
this.FormValueData[element] = res['com'][element]['data'];
this.FetchValueParam[element] = res['com'][element]['data'];
});