Ich erstelle ein Formular in HTML mit Hilfe von ng-repeat, um die Formularelemente von einem Objekt im Bereich zu erzeugen. Ich verwende dieses Objekt auch, um andere Elemente außerhalb der ng-Wiederholung zu generieren.Ändern von Objekten innerhalb von Angular Scope in ng-repeat
Ein vereinfachtes Beispiel sieht wie folgt in HTML:
<div ng-app="App">
<div ng-controller="Ctrl">
<div class="block1">
<form ng-repeat="(key, value) in test">
<label>{{key}}</label>
<input ng-model="value" />
<p>{{value}}</p>
</form>
</div>
<div class="block2">
<p>
{{test.a}}
</p>
<p>
{{test.b}}
</p>
</div>
</div>
</div>
und dies in JS:
angular.module('App', []);
function Ctrl($scope) {
$scope.test = {
a:"abc",
b:"def"
}
}
In diesem Beispiel wird der Text in block2 auf die Anfangswerte von test.a
und test.b
gesetzt . Die Eingabewerte und <p>
Werte innerhalb der Schleife werden ebenfalls auf den Anfangswert gesetzt.
Wenn ich die Werte innerhalb der Eingänge ändere, werden die <p>
Werte innerhalb des ng-repeat Blocks korrekt aktualisiert, aber die <p>
Tags in Block2 können nicht aktualisiert werden.
Warum ist das das Verhalten? Erstellt ng-repeat einen eigenen isolierten Bereich? Wenn ja, wie kann ich den Controller-Level-Bereich aktualisieren? Könnte jemand auch den Grund für dieses Verhalten und seine Vorteile erklären?
Dank für die klare Erklärung des Verhaltens.Mein Anwendungsfall erfordert, dass ich die Eigenschaften von "test" nach dem Namen im äußeren Bereich referenziere, so dass ein Array für mich nicht funktioniert, aber Unterobjekte scheinen gut zu funktionieren. –
Meine Objektschlüssel sind UNIX-Zeiten, so ist dies sehr schwierig für mich – neaumusic
@neaumusic Kommentar nicht klar, eine Frage zu stellen, wenn Sie Hilfe benötigen – charlietfl