ng-repeat Ausführung zwingt Eingabe, den Fokus zu verlieren

8

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?

    
moesef 04.09.2014, 01:38
quelle

2 Antworten

18

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.

%Vor%

Demo

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 ): -

%Vor%

Demo

    
PSL 04.09.2014, 01:47
quelle
0

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.

%Vor%     
Maarten Winkels 04.09.2014 01:49
quelle