À l'aide de profondément imbriqués objet JSON dans AngularJS - comportement étrange

J'essaie de comprendre comment AngularJS voit un objet à partir d'une profondément imbriqués JSON. Voici un exemple plunker. Les données proviennent du service et est affecté à $scope.data. Le code javascript semble vouloir me déclarer tous les niveaux de l'objet avant d'en faire usage, mais le référencement d'un niveau de profondeur à l'intérieur de l'objet à partir de la vue HTML fonctionne toujours, et en utilisant le niveau de profondeur dans une fonction plutôt des travaux. C'est plutôt incohérent.

Je ne sais pas si ma compréhension de $scope est manquant, ou si cela a quelque chose à faire avec la promesse d'objets. Conseiller s'il vous plaît?

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"
        ]
    }
}

OriginalL'auteur Ray Shan | 2013-05-04