AngularJS が深くネストされた JSON からオブジェクトを認識する方法を理解しようとしています。以下は plunker の例です。データはサービスから取得され、に割り当てられ$scope.data
ます。JavaScript コードでは、使用前にオブジェクトのすべてのレベルを最初に宣言する必要があるようですが、ビュー HTML からオブジェクト内の深いレベルを参照することは常に機能し、関数で深いレベルを使用するとうまくいきます。かなり矛盾しています。
私の理解$scope
が不足しているのか、それとも promise オブジェクトと関係があるのか はわかりません。アドバイスしてください?
HTML
<body ng-controller="MainCtrl">
Referencing nested obj in view works:
{{data.level1.level2}}
<br>
Using nested obj within declared scope var doesn't work:
{{nestedObj}}
<br>
Using nested obj in a function works but throws TypeError:
{{getLen()}}
</body>
Javascript
var app = angular.module('app', []);
app.factory('JsonSvc', function ($http) {
return {read: function(jsonURL, scope) {
$http.get(jsonURL).success(function (data, status) {
scope.data = data;
});
}};
});
app.controller('MainCtrl', function($scope, JsonSvc) {
JsonSvc.read('data.json', $scope);
// Using nested obj within declared scope var doesn't work
// Uncomment below to break whole app
// $scope.nestedObj = $scope.data.level1.level2;
// Using nested obj in a function works but throws TypeError
// Declaring $scope.data.level1.level2 = [] first helps here
$scope.getLen = function () {return $scope.data.level1.level2.length};
});
JSON
{
"level1": {
"level2": [
"a",
"b",
"c"
]
}
}