angular.js, nicht Bearbeiten können dynamisch erstellte input-Felder
Verwenden angular.js ich habe eine dynamische Liste der Formular-Felder, die ich anzeigen möchten, die dem Benutzer für die Bearbeitung (und später Einreichung):
var app = angular.module('app', []);
app.controller('Ctrl', function($scope) {
$scope.fields = {
foo: "foo",
bar: "bar",
baz: "baz"
};
});
Und HTML:
<div ng-app="app" ng-controller="Ctrl">
<table>
<th>key</th>
<th>value</th>
<th>fields[key]</th>
<tr ng-repeat="(key,value) in fields">
<td>{{key}}:</td>
<td><input type="text" ng-model="value"/></td>
<td><input type="text" ng-model="fields[key]"/></td>
</tr>
</table>
</div>
Sehen diese Geige. Für einem Grund ich nicht verstehen, den text-Eingabe-Felder sind nicht editierbar. Ich habe versucht, zwei verschiedene Möglichkeiten, wie oben gesehen: value
und fields[key]
. value
ist nicht bearbeitbar, und fields[key]
ermöglichen eine Tastendruck und dann verwischt. Was mache ich falsch? Danke.
- es ist sichtbar, aber nach jedem Tastendruck das Textfeld Fokus verlieren, so dass Sie haben, klicken Sie auf ihn erneut, um einen anderen char
- Und das passiert, weil Sie ganze Vorlage neu gerendert wird nach jeder änderung in jedem der Modelle. Und nach Vorlage neu gerendert, es gibt derzeit keine Möglichkeit zu wissen, welcher Eingang den Fokus. So erstellen Sie auf diese Weise und Sie können schreiben wollen, die Richtlinie zu halten, konzentrieren sich auf ausgewählte Eingabe.
- Danke @SET, das macht Total Sinn, Sie sollten machen, dass eine Antwort!
- mögliche Duplikate von Schwierigkeiten mit ng-model, ng-repeat und-Eingänge
- Danke @Mark Rajcok, meine Frage ist definitiv ein Teil des einen, und es sind einige gute Erklärungen gibt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es editierbar, aber nach jedem Tastendruck das Textfeld Fokus verlieren, so dass Sie haben, klicken Sie auf ihn erneut, um einen anderen char.
- Und das geschieht, weil Sie ganze Vorlage neu gerendert wird nach jeder änderung in jedem der Modelle. Und nach Vorlage neu gerendert, es gibt derzeit keine Möglichkeit zu wissen, welcher Eingang den Fokus. So erstellen Sie auf diese Weise und Sie können schreiben wollen, die Richtlinie zu halten, konzentrieren sich auf ausgewählte Eingang.
fields[key]
Ursache einer re-Rendern, aber nichtfield.value
?SATZ beantwortet, warum es passiert, aber ein work-around zu erreichen, das gewünschte Verhalten wäre, dass eine separate array von Schlüssel und Lauf ng-repeat off diese Tasten. Ich habe einige Textfelder für die Tests auf weitere Eigenschaften hinzufügen, um
$scope.fields
Könnten Sie $watch dynamisch einstellen die Tasten, wenn die Eigenschaft "count" ändert sich, wenn sich Ihre Anforderungen waren, dass das Feld Anzahl kann sich ändern.
http://jsfiddle.net/aERwc/10/
markup
controller
setFieldKeys
Methode ersetzt werden kann, wie$scope.fieldKeys = Object.keys(data);
glaube ich.Müssen Sie verwenden ein array von Objekten. Hoffentlich können Sie überarbeiten Ihr Modell:
Fiddle.
fields
array (meine möglicherweise falsche Schlussfolgerung, wie das funktioniert), und dies könnte sich in Zukunft ändern.