2012-11-17 66 views
3

我有一個返回JSON服務,假設這是響應:AngularJS - 訪問JSON對象關聯到一個模型

{ 
    "model": 48870, 
    "id": 20 
} 

我可以這樣做:

$scope.response = Service.get(); 

它將分配JSON響應$scope.response。這裏的問題是,我無法分別通過$scope.response.model$scope.response.id直接訪問modelid。我對這種情況的解決方法是在服務的成功回調中定義一個函數,並從data獲取modelid。但考慮到$scope.response包含整個JSON對象,並且理論上(和乾淨代碼的緣故)讓我訪問它的子項,這不是很實際。這裏

兩個問題:

  1. 是它的模型AngularJS表示的限制嗎?
  2. 如何在不需要爲每個呼叫定義成功回調的情況下指向兒童(甚至是孫子女)?
+2

1.不,在AngularJS中沒有這樣的限制。 2.取決於您如何使用此模型:html-template數據綁定或控制器代碼。在後者的情況下,你必須確保在使用它之前加載'$ scope.response.model'(例如,成功回調),否則你會得到一個ReferenceError。 –

+3

你的Service.get()是什麼樣的?如果您使用$ http.get或類似的東西,這可能是與該函數返回一個Promise而不是實際的JSON有關的問題。這可以通過承諾「在角度上被模板引擎識別」這一事實而加劇,這意味着在模板中,您可以將附加到範圍的承諾視爲它們的結果值。「 [$ q](http://docs.angularjs.org/api/ng.$q) –

+0

你們其中一位應該提供他的評論作爲答案,以便我可以接受。兩者對我都是正確和有效的。 – abstractpaper

回答

1

一旦異步HTTP調用返回時,它是安全的直接訪問響應的特性。

See this short example

app.controller('MainCtrl', function($scope, $resource) { 
    $scope.data = $resource('data.json').get(function() { 
    $scope.loaded = true; 
    //now it's safe to access $scope.data's properties: 
    $scope.data.foo = $scope.data.id + ':' + $scope.data.model; 
    }); 
}); 

UI綁定會自動工作。