2016-04-11 10 views
1

Ich habe folgende Schrägansicht:Ng-Wiederholung scheint nicht einen separaten Bereich für jedes Element zu erstellen, bei der Verwendung von Array.push()

<div ng-repeat="item in items track by $index"> 
    <input ng-model="item.name"/> 
</div> 

In der Steuerung, nenne ich einen Dienst ein Json zu erhalten

$http.post("/NewItemJson").then(function (response) { 
    $scope.newItem = response.data; 
}); 

$scope.addItem = function() { 
    $scope.items.push($scope.newItem); 
}; 

Aber wenn ich die Ansicht zu testen, ich sehe, dass alle neuen Elemente hinzugefügt durch die addItem() Funktion verpflichtet sind: Darstellung eines neuen, leeren Elements, so kann ich es auf das Array mit der folgenden Funktion hinzufügen der gleiche Umfang. Ich kann sagen, dass, weil, wenn ich einen der Eingänge zu ändern, alle anderen in der gleichen Zeit ändern:

enter image description here

Diese seltsam ist, weil ng-repeat einen anderen Bereich für jedes Element erstellen sollte. Und zwar für alle Elemente des Arrays, die nicht mit der Funktion addItem() hinzugefügt wurden, aber in diesem Fall nicht. Was vermisse ich?

+1

Wo ist Ihr Code, der addItem aufruft? Ist es möglich, dass Sie nur den gleichen Artikel hinzufügen? –

+0

Ich rufe die Funktion aus der Ansicht mit ng-click = "addItem()". Die Elemente, die ich hinzufüge, sind leere Objekte ... alle Id sind leere Guids. Könnte das das Problem sein? – tocqueville

Antwort

2

Sie aktualisieren $scope.newItem nicht, wenn Sie addItem() ausführen, also fügen Sie das gleiche Element immer und immer wieder hinzu. Versuchen Sie Folgendes:

$scope.addItem = function() { 
    $scope.items.push(angular.copy($scope.newItem)); 
}; 
+0

Korrigieren. Ich danke dir sehr! – tocqueville