zwei-Wege-Bindung funktioniert nicht mit ng-repeat
Habe ich eine einfache ng-repeat-Liste, in die ich mich zuordnen aktuelle Listenelement mit dem Wert einer anderen Eigenschaft auf dem controller wie folgt:
<li ng-repeat="num in list">
<input type="text" ng-init="value = num" ng-model="value" />
<button type="button" class="btn btn-primary" ng-click="save()">Save</button>
</li>
Aber wenn ich auf den Speichern-button, den ich erhalten default-Wert für $Umfang.Wert. Ich erwarte, dass der Wert für die insbesondere die Eingabe von text angezeigt werden.
Hier ist der controller:
angular.module('myApp', [])
.controller('MyController', function($scope){
$scope.value = false;
$scope.list = [0, 1, 2, 3, 4];
$scope.save = function() {
alert($scope.value);
}
});
Wie kann ich den Zugriff auf die aktualisierten Wert von einem input-Element in meinem controller auf "speichern" - Funktion aufrufen.
Hier ist die plunker für das gleiche: plnkr
Update: ich gehe davon aus, dass der Wert geholt werden, um controller, ohne es als parameter übergeben.
- ngRepeat Ihren eigenen Bereich erstellt.
- Okay, so, wie Sie den Wert abrufen.
- Sie können pass " - Wert zu speichern-Funktion, wie
ng-click="save(value)"
übernehmen Sie die parameter und führen Sie dann die operation - Ich kann das tun, aber dass trotzt der zwei-Wege-Bindung Zweck.
- dann nutzen Sie
ng-model="$parent.value"
- Ihre plunkeris nicht aktualisiert
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wow ich kann nicht glauben, die meisten Leute haben gefehlt. Wenn Sie mit Angular 1.2, dann sollten Sie definitiv check out
track by
keyword in Ihrer ngRepeat-Direktive.Bottom line ist es bleiben Sie Weg von primitiven Typen beim binden da es Ihnen sync-Probleme.
Fellas bitte setzen mehr Zeit und Mühe in die Erforschung Ihrer Lösungen, statt einfach nur posten um Punkte.
Hoffe, das hilft!
ngRepeat einen Bereich erstellen, also Objekt als Verweis übergeben wird und die Anzahl von Wert.
Dein code ist problematisch, wenn Sie erfolgreich den Wert aktualisieren, erfolgt die Aktualisierung alle zahlen, in ng-repeat. Sie können dies tun:
html
javascript
http://jsfiddle.net/oq6zdeLd/
Tut mir Leid wegen mein Deutsch...
hier ist es, wie Sie tun können, dass
Können nicht missbrauchen die expression "2-Wege-binding" 😉
Dem controller hat man Spielraum und es gibt nur eine
$scope.value
in diesem Bereich. Sie können nicht Kraft ist, um mehrere Werte gleichzeitig.ng-repeat
schafft neuen Spielraum für jedenli
. Und selbst wenn Sie versuchen, verwenden Sie$parent.value
, controller$scope.value
wird nur der Letzte zugewiesene Wert inng-init
Du am besten in diesem Fall übergeben Sie den Wert als argument. Hoffe, das half zu erklären, das Problem ein wenig mehr. Korrigieren Sie mich, wenn ich falsch bin.