Mit tief verschachtelten JSON-Objekt aus in der AngularJS - seltsames Verhalten

Ich versuche zu verstehen, wie AngularJS sieht ein Objekt aus einer tief verschachtelten JSON. Hier ist ein Beispiel, plunker. Die Daten stammen aus service-und zugeordnet ist $scope.data. Der javascript-code scheint nicht zu wollen, mir zu erklären, jede Ebene der Objekt zuerst vor der Verwendung, sondern verweisen auf einen tiefen Pegel in-Objekt aus der HTML-Ansicht immer funktioniert, und mit dem tiefen Ebene in eine Funktion ein bisschen arbeiten. Es ist eher inkonsequent.

Ich bin mir nicht sicher, ob mein Verständnis von $scope fehlt, oder ob dies etwas zu tun mit Versprechen von Objekten. Beraten Sie bitte?

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

InformationsquelleAutor Ray Shan | 2013-05-04

Schreibe einen Kommentar