2015-10-08 6 views
6

Wiederholungsanweisung, die Weinrekorde von einer API ausgibt. Ich habe eine Fabrik-Funktion den Wein API zu dienen, die dann in meinem Controller zugegriffen wirdFehler: [ngRepeat: Dupes] Was bedeutet das?

app.factory("Wine", function ($http){ 
    var factory = {}; 

    //getWines 
    factory.getWines = function(){ 
     return $http.get("http://www.greatwines.9000.com") 
    } 

} 

Controller:

app.controller("winesCtrl", function($scope, $http, Wine){ 
     Wine.getWines() 
     .success(function(wines){ 
      $scope.wines = wines; 
     }) 
     .error(function(){ 
      alert("Error!"); 
     }); 
    }); 

VIEW: 

<h2>Wine list</h2> 
    <div class="row margin-top-20 wine-container" ng-repeat="wine in wines"> 
     <div class="col-sm-3"> 
      <img src="{{wine.picture}}" class="img-responsive" /> 
     </div> 
     <div class="col-sm-9"> 
      <div class="margin-top-20"> 
       <span class="bold">Name: </span><span>{{wine.name}}</span> 
      </div> 
      <div> 
       <span class="bold">Year: </span><span>{{wine.year}}</span> 
      </div> 
      <div> 
       <span class="bold">Grapes: </span><span>{{wine.grapes}}</span> 
      </div> 
      <div> 
       <span class="bold">Country: </span><span>{{wine.country}}</span> 
      </div> 
      <div> 
       <span class="bold">Region: </span><span>{{wine.region}}</span> 
      </div> 
      <div> 
       <span class="bold">Price: </span><span>{{wine.price}}</span> 
      </div> 
      <div> 
       <span class="bold">{{wine.description}}</span> 
      </div> 
      <div class="margin-top-20"> 
       <a href="#/wines/{{wine.id}}" class="btn btn-default">Edit Wine</a> 
      </div> 
     </div> 
    </div> 

ich auf diesem Fehler geklickt und im typischen „vage“ AngularJS Art und Weise ich diese bekommen :

Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: wine in wines, Duplicate key: string:e, Duplicate value: e 

Was bedeutet das? Wein ist nicht dasselbe wie "Wein", also warum denkt er, dass es ein Duplikat ist?

Antwort

10

Tritt auf, wenn in einem ngRepeat-Ausdruck doppelte Schlüssel vorhanden sind. Doppelte Schlüssel sind gesperrt, da AngularJS Schlüssel verwendet, um DOM-Knoten Objekten zuzuordnen.

Dies bedeutet, dass $ scope.wines einige Werte haben, die doppelt sind.

Sie können auch diesen Beitrag verweisen: Angular ng-repeat Error "Duplicates in a repeater are not allowed."

+0

Dank es gibt aber noch keinen Sinn für mich machen. Außerdem habe ich http://www.greatwines.9000.com/wines am Ende der HTTP-Anfrage hinzugefügt und aus irgendeinem Grund funktioniert es jetzt. Ich stolpere immer wieder über diese mysteriösen Bugs und behebe mich mit angularjs. Es ist nicht sehr konsistent. – HGB