2016-10-21 2 views
3

Ich bin ein Angular Anfänger. Ich möchte eine json auf laden, das funktioniert gut aber wenn ich eine Änderung an einem input Feld mache, erhalte ich eine Fehlermeldung.Angular Load Json Fehler

Error: $rootScope:infdig Infinite $digest Loop 

Dank

Mein HTML

<body ng-app="myApp" ng-controller="mainCtrl"> 
<div id="wrapper"> 
    <header style="height:50px;"> </header> 
    <div class="container"> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
     <script src="js/controller.js"></script> 
     <section> 
      <div class="col-md-4"> 
       <label for="words">Wörter</label> 
       <input ng-model="words" id="words" type="number" name="words" placeholder="Wörter" min="10" max="10000" value="{{words}}" step="10"> 
      </div> 
      <p>{{words}}</p> 
      <div id="view" class="col-md-6"> 

       <ul ng-controller="loadContent"> 
        <li ng-repeat="content in contents | orderBy:random">{{content.text}}</li> 

       </ul> 
      </div> 

     </section> 
    </div> 
</div> 

Mein Javascript

var app = angular.module('myApp', []); 
app.controller('mainCtrl', function ($scope, $http) { 
    $scope.words = 40; 
    $scope.letterLimit = 400; 
}); 
app.controller('loadContent', function ($scope, $http) { 
$scope.random = function() { 
     return 0.5 - Math.random(); 
    } 
$scope.loadContent = function() { 
    var def = $http.get('data.json').success(function(data) { 
     $scope.contents = data; 
    }); 
} 
$scope.loadContent(); 
}); 

Mein json

+1

Entfernen Sie '$ scope.loadContent();' von Ihrem Controller und fügen Sie es als 'ng-init =" loadContent "' in Ihrer Ansicht hinzu. –

+0

Es ist sehr seltsam, können Sie Ihren JSON setzen, und dieser Json ist gut geladen? –

Antwort

2

Ich denke, dass angular kontinuierlich Ihren Controller regelt, sobald Sie mit der Ansicht interagieren, und führt daher $scope.loadContent(); auf der Unterseite Ihres Controllers wiederholt aus.

Ich nehme an, Sie wünschen nur, dass dies einmal ausgelöst wird? Wenn ja, entfernen Sie den Funktionsaufruf von Ihrem Controller und ändern Sie Ihre Ansicht wie folgt.

<body ng-app="myApp" ng-controller="mainCtrl" ng-init="loadContent"> 

Mit diesem wird $scope.loadContent nur einmal aufgerufen. Wenn Sie es anders oder mehrmals nennen möchten, geben Sie dies bitte in Ihrer Frage an.

+0

Danke funktioniert gut –

+0

Gern geschehen. Ziehen Sie auch in Betracht, 'ng-cover' zu Ihrem Körper hinzuzufügen, um zu verhindern, dass der Browser während des Ladens des JSON nicht kompilierten Winkelcode anzeigt. https://docs.angularjs.org/api/ng/directive/ngCloak. Wenn dein JSON lokal ist, ist das natürlich nie ein Problem ... –