如何将新的对象添加到angular2 JSON响应
我挣扎,新的对象添加到JSON响应
我的样本JSON响应如何将新的对象添加到angular2 JSON响应
{
"products": [{
"id": 1,
"name": "xyz"
}]
}
得到回应后需要添加新对象(显示)到相同的JSON响应
{
"products": [{
"id": 1,
"name": "xyz",
"show":false
}]
}
这是我的示例代码
import {Component,OnInit} from '@angular/core';
import {Http, Response} from '@angular/http';
import 'rxjs/Rx';
@Component({
templateUrl:'./electronics.html'
})
export class electronicsComponent{
productListElectronics={};
productListElectronicResponse: Object;
error:Object;
constructor(private http: Http) {
this.productListElectronicResponse={};
this.error={};
http.get('../json/electronics/electronics.json').map((res: Response) =>res.json()).subscribe(res =>
{
for(var i = 0; i <= res['products'].length; i++){
res['products'][i].show=false;
}
console.log(res);
}, error => this.error = error);
}
}
但是控制台不断抛出下面的错误
ERROR TypeError: Cannot set property 'show' of undefined at SafeSubscriber.http.get.map.subscribe._this.error [as _next] (products.component.ts:22) at SafeSubscriber.__tryOrUnsub (Subscriber.ts:238) at SafeSubscriber.next (Subscriber.ts:190) at Subscriber._next (Subscriber.ts:135) at Subscriber.next (Subscriber.ts:95) at MapSubscriber._next (map.ts:80) at MapSubscriber.Subscriber.next (Subscriber.ts:95) at XMLHttpRequest.onLoad (xhr_backend.ts:104) at ZoneDelegate.invokeTask (zone.js:398) at Object.onInvokeTask (ng_zone.ts:253) at ZoneDelegate.invokeTask (zone.js:397) at Zone.runTask (zone.js:165) at XMLHttpRequest.ZoneTask.invoke (zone.js:460)
这应该用于遍历你的对象的数组工作:
for(var key in res['products']){
res['products'][key].show=false;
}
使用'for ... in'来迭代数组通常是不被接受的。 – 2017-05-08 08:03:02
@torazaburo如果键不是索引,你还要如何遍历对象? – echonax
使用数组,键(几乎总是)索引。 – 2017-05-08 08:07:49
你的错在这里
for(var i = 0; i <= res['products'].length; i++)
应该
for(var i = 0; i <res['products'].length; i++)
:)
如果出现错别字的原因会很好。哦,等一下,有。 – 2017-05-08 08:12:15
可能性1:
从<=
从for
循环else竟被它删除=
d再运行一次未定义的对象。
for(var i = 0; i < res['products'].length; i++){
res['products'][i].show=false;
}
它上面的解决方案不工作,然后尝试以下可能性2
我怀疑res['products']
返回一个json array
。下面的代码行
运行,并在此附上你的结果:
console.log(res['products'])
for(var i = 0; i <= res['products'].length; i++){
console.log(res['products'][i]);
res['products'][i].show=false;
}
将断点在相关线上,等它到那里,然后例如值,如'i'或'水库[ '产品'] [I]'。 – 2017-05-08 08:09:40