Ich habe eine Eingabe, die mit ng-repeat
erstellt wurde %Vor% Ich möchte, dass dies die Eingaben mit den Werten in currentQuestion['possible_answers']
vorbelegt, und ich möchte auch, dass alle Änderungen an diese Variable gebunden werden.
Jedes Mal, wenn ich in eines dieser Textfelder eintippe, tippe ich einen Buchstaben ein und verliere den Fokus des Eingabefeldes. Ich habe das Gefühl, dass dies daran liegt, dass ich anfange zu tippen und die Aktualisierung des Datenbiddings currentQuestion
. Da currentQuestion
aktualisiert wird, wird ng-repeat
erneut ausgeführt.
Gibt es eine Möglichkeit, die ng-repeat
-Aktion zu einer einmaligen Aktion zu machen, anstatt sie ständig neu zu bewerten?
Ja ( Blick auf die Symptome, Sie haben uns die Daten nicht gezeigt ) Ihr Problem könnte darin bestehen, dass Ihr Modell der Text im Array ist, den Sie haben könnten. Wenn Sie also das Modell aktualisieren, wird ein Digest-Zyklus ausgelöst, da ng-repeat vom Text verfolgt wird. Sie können dies leicht beheben, indem Sie Folgendes bereitstellen. track by $index
, so dass die ng-Wiederholung überwacht wird und die Wiederholung nur dann aktualisiert wird, wenn sich das Array in seiner Länge ändert.
Sie können auch $index
verwenden, um den Index des Arrays zu erhalten. Sie müssen nicht mit (key, value)
iterieren.
Aber ich würde nur meine Antwort Array ein Array von Objekten und loswerden all dieser Probleme, und es wäre nur (_note die Verwendung von $index
und ng-model
): -
Der ng-repeat
erstellt einen neuen untergeordneten Bereich für jedes Element in der Liste. In diesem Bereich kennt es index
und answer
. Sie binden den Wert der Eingabe an etwas außerhalb des Bereichs, nämlich an das gleiche Element im Array. Wenn Sie es ändern, wird die Liste neu gezeichnet, was dazu führt, dass die Eingabe den Fokus verliert.
Tags und Links angularjs input angularjs-ng-repeat