2017-06-21 56 views
0

我有一個從服務器獲取數據的組件和服務器返回一個字符串JSON就像:角2嵌套屬性沒有被檢測到物體 - 打字稿

"{ 
    "name": "John Doe", 
    "age": "5", 
    "addresses": [ 
    {"street": "123 Street", "city": "Main City"} 
    ] 
}" 

所以,當我收到這在我的組件我做的:

let result = JSON.parse(response); //response is the JSON string from server 

然後,因爲我需要顯示我使用ngFor,以顯示它的所有地址。問題是地址不顯示。當我甚至只顯示地址的長度時,它顯示爲零。於是,我就在控制檯上打印整個對象,也顯示地址沒有內容,但如果我這樣做只打印地址:

console.log(result['addresses']) or console.log(result.addresses); 

它顯示這是怪異的內容。所以希望有人能幫助我。

+0

可能需要出示* ngFor片斷太多,因爲這很可能是哪裏的問題的單元。 JSON.parse(響應)看起來很好。 result.address應該是未定義的,因爲「地址」不是「地址」。 – Mitch

+0

它聽起來像你試圖用ngFor結果而不是result.address – LLai

+0

不要發佈你的HTML,你用的是在UI中顯示這個響應 – Manish

回答

-2

當使用引號將字符串表示形式放入字符串中時,必須使用引號作爲字符串分隔符來使用撇號。

'{ 
"name": "John Doe", 
"age": "5", 
"addresses": [ 
    {"street": "123 Street", "city": "Main City"} 
] 
}' 

這應該有效。

+0

他只是用雙引號表示它是一個字符串。 – 2017-06-21 05:01:48

+0

有些情況下數據被封裝在雙引號內,如果這是場景,那麼JSON.parse()會引發錯誤。這就是爲什麼我建議他使用撇號作爲字符串分隔符。 Nvm –

2

好,所以問題是你如何試圖訪問地址。你的地址是一個數組對象。所以你用*ngFor來顯示。你的組件模板應該看起來像這樣。

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     Name:{{data.name}}<br> 
     <label *ngFor="let a of data.addresses"> 
     Street:{{a.street}} 
     City:{{a.city}} 
     </label> 
    </div> 
    `, 
}) 

和你很好去。這裏有一個Plunker Demo的相同。

這裏是console.log(result.addresses)console.log(result)的結果已經在Plunker中更新過,也可以驗證。下面是相同 enter image description here

希望它能幫助:)

+0

正如你可以看到我的json不是一個數組,只有地址是一個數組。而控制檯只是我編輯過的錯字錯誤。 – Jed

+0

好的。但我認爲你仍然應該發佈你的HTML如何試圖在UI上顯示這些數據。因爲你可以在plunker演示中看到它工作正常。你能告訴我爲什麼這個倒下了嗎? – Manish

+0

@Jed根據您的意見更新了答案。而且我們也不能假設HTML是正確的。因爲我提供的演示似乎工作得很好。所以這顯然意味着你的代碼存在一些問題。 – Manish