簡體   English   中英

向 Angular 中的 JSON 響應添加新的對象屬性

[英]Add new object property to JSON response in Angular

我正在嘗試向我的 JSON 響應添加一個新的對象屬性。

我的示例 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 i = 0; i <= res['products'].length; i++)

它應該是

for(var i = 0; i <res['products'].length; i++)

:)

https://jsfiddle.net/rt6LjvLa/

這應該適用於遍歷您的對象數組:

for(var key in res['products']){

    res['products'][key].show=false;

}

小提琴: https : //jsfiddle.net/echonax/dm1d0vyw/

可能性一:

刪除= from <= from for循環,否則它會為未定義的對象再運行一次。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM