2013-05-25 130 views
2

我可能只是盲目或其他東西,但我真的不知道爲什麼我不能訪問返回的$ Resource對象的子對象,它檢索了一堆JSON對象。無法訪問返回的JSON對象的子對象

Resource 
> $resolved: true 
> $then: function (b, g) {var j=e(),h= 
> data: Object 
    > 519bc5f6b2427a732be1c360: Object 

原始JSON看起來是這樣的:

{ 
    "data": { 
     "519bc5f6b2427a732be1c360": { 
      "id": "519bc5f6b2427a732be1c360", 
      "planning": { 
       "id": "519bc5f6b2427a732be1c355" 
      } 
     } 
    } 
} 

誰能解釋一下我爲什麼這不起作用:

var training = Training.query() 

console.log(training); // returns the entire $Resource 
console.log(training.data); // returns: undefined 
+0

一個科學的猜測:http://felix-kling.de/blog/2011/08/18/inspecting-variables-in-javascript-consoles/ PS:如果我是你,我會暫停(只是一個常規的或者使用'debugger;')並且用調試器檢查實際值是什麼(這是正確的,你可以信任一個調試器,並且你不能相信'console.log() ') – zerkms

+0

'.query()'返回一個數組 – Ven

+0

@ user1737909好點,但這已經解決了我的服務層,沒有添加;我已經手動設置.query()返回isArray:false; –

回答

1

嘗試獲得的數據是這樣的:

var training = Training.query(function($val) { 
    console.log($val); 
    console.log($val.data); 
}); 
+0

This Works!我現在有另一個問題,但我可能能夠弄清楚這一點。感謝您的貢獻! 閉包函數似乎因某種原因而起作用,但我仍然認爲這種奇怪和意外的行爲。 –

2

下面是解釋 - 從the Angular docs

認識到調用$ resource對象方法立即返回一個空引用(依賴於isArray的對象或數組)是很重要的。一旦從服務器返回數據,現有參考將填入實際數據。這是一個有用的技巧,因爲通常資源被分配給一個模型,然後由該模型渲染。擁有一個空對象不會導致渲染,一旦數據從服務器到達,那麼該對象將被填充數據,並且視圖會自動重新渲染自己以顯示新數據。這意味着在大多數情況下,不必爲動作方法編寫回調函數。

所以此工程:

var training = Training.query(function(value){ 
    // this is the callback function 
    console.log(training === value); // true - it's the same object 
    console.log(training.data); // and now it has data 
});