2017-03-04 1 views
0

Aus unbekannten Gründen ng-Wiederholung zu oft in der Template-Datei von der ng-Route geladen wiederholt:ng-repeat-Schleifen zu oft

angular 
    .module('myApp', [ 
    'ngAnimate', 
    'ngCookies', 
    'ngResource', 
    'ngRoute', 
    'ngSanitize', 
    'ngTouch' 
    ]) 
    .config(function ($routeProvider) { 
    $routeProvider 
     .when('/items/item1', { 
     templateUrl: 'items/item-review.html', 
     controller: 'ItemController', 
     controllerAs: 'myCtrl' 
     }) 
     .otherwise({ 
     redirectTo: '/' 
     }); 

    }); 

HTML:

<div class="reviewItem" ng-repeat="reviewItem in myCtrl.prop"> 

    <div class="row"> 
     <div>{{reviewItem.name}} </div> 
    </div> 

</div> 

Es gibt me 5 Schleifen statt der Menge an Gegenständen in der Anordnung, die in 2-Objekte json Datei hat:

[{ 
    "item": { 
     "name": "content", 
     "name2": "content2" 
    } 
}, { 
    "item": { 
     "name": "content", 
     "name2": "content2" 
    } 
}] 

die Steuerung geht wie thi s:

angular.module('dbreviewsApp') 
    .controller('ItemController', function($scope, $http) { 

    var myCtrl = this; 
    myCtrl.prop=[]; 

     $http.get('items.json') 
     .then(function(response) { 

      myCtrl.prop = response; 

     }, function(response) { 

      //Second function handles error but there is no error during the get request 

     }); 

}); 
+0

remove myCtrl.prop = []; und versuchen Sie –

+1

bitte eine Geige zur Verfügung stellen. Was meinst du mit "ng-repeat loops zu oft" und "5 loops" ?? –

+0

Von dem, was Sie hier angegeben haben, gibt es zwei Dinge, die Sie ändern müssen: Ändern Sie 'myCtrl' zu' $ scope.myCtrl' und ändern Sie in HTML '{{reviewItem.name}} 'in' {{reviewItem. item.name}} '. Woher weißt du, dass es 5-mal eine Schleife gibt, wenn es nicht einmal ohne diese Änderungen eine Schleife machen sollte? Bitte geben Sie eine Geige oder posten Sie Ihren vollständigen Code – Nishant123

Antwort

0

Das Problem ist mit der Technik, die Sie verwenden die Antwortdaten zuweisen zurück:

$http.get('items.json') 
     .then(function(response) { 

      myCtrl.prop = response; //<-- This is the problem. 

      // Comment/remove the upper line and write it like 
      myCtrl.prop = response.data; // <-- Correct technique. 

     }, function(response) { 

      //Second function handles error but there is no error during the get request 

     }); 

Statt myCtrl.prop = response;, verwenden Sie die data Eigenschaft den Wert zuweisen; wie myCtrl.prop = response.data;

Und zu klären, warum Ihre ng-repeat für 5mal geloopt ist, weil das response Objekt enthält 5 Objekte nämlich data, status, headers, config, statusText.

0

Problem ist mit myCtrl.prop = response; sollte es myCtrl.prop = response.data; sein. finden Sie die Arbeits Plunker

var myCtrl = this; 
    myCtrl.prop = []; 

    $http.get('items.json') 
    .then(function(response) { 

     myCtrl.prop = response.data; 
     console.log(myCtrl.prop); 

    }, function(response) { 

     //Second function handles error but there is no error during the get request 

    }); 
0

wenn Sie $ Ressource dann Daten in Reaktion verwenden, aber wenn Sie verwenden $ http dann Daten in Ihrem response.data

myCtrl.prop = response.data; 
0

Dank für die Hilfe zu beheben. Anscheinend war das Problem im übergebenen Objekt - standardmäßig hat es 5 Eigenschaften: config, data, headers, status, statusText, daher die 5-malige Wiederholung, "Daten" Targeting fehlte.

Hinzufügen von .data in der ng-repeat: myCtrl.prop.data löste das Problem. myCtrl.prop = response.data; funktioniert auch.