Ich bin mit dieser kleinen Aufgabe fest. Ich muss Formular Eingabefelder dynamisch generieren, indem Sie auf "Hinzufügen" im Formular klicken. Das Formular soll DB-Tabellenschema erstellen. Jedes Eingabefeld ist also ein DB-Tabellenfeldname.Erzeuge dynamische Form Eingabefelder und sammle Felddaten in einem Array
Ich bin OK die Felder dynamisch zu erzeugen, habe aber Probleme mit den aktuellen Daten zu sammeln.
<form ng-controller="NewTableCtrl" ng-submit="submitTable()">
<input type='text' ng-model='table.title' placeholder='Title:'>
<input ng-repeat="field in fields" type='text' ng-model='table.fields' placeholder='Field:'>
<div>
<button type='submit'>Submit</button>
<button ng-click="addFormField()">Add</button>
</div>
</form>
.. und die Steuerung
.controller('NewTableCtrl', function($scope) {
$scope.fields = [];
$scope.table = {};
$scope.addFormField = function() {
$scope.fields.push({});
}
$scope.submitTable = function() {
console.log($scope.table);
}
});
Sieht einfach. Wenn ich auf die Schaltfläche "Hinzufügen" klicke, wird das neue Eingabefeld generiert, jedoch mit dem gleichen Modellobjekt (offensichtlich). Und da liegt mein Missverständnis. Ich dachte, dass, wenn ich $scope.fields = [];
in der Steuerung erkläre, dann wiederholende Felddaten gerade in das Array gehen. Aber es gibt nur die Eingabe in jedem sich wiederholenden Eingabefeld wieder. Ich verstehe jetzt, dass es so ist, wie es mit Zwei-Wege-Bindung sein soll.
Der Grund ich so gedacht ist, durch die Analogie mit einer gewöhnlichen Form, wo die Vorlage wiederholenden Eingabefeldnamen werden ein Array in den URL-codierten Form-Daten.
Also, wie löse ich das? Der Server muss ein Feld mit folgenden Feldern erhalten: fields: [field1, field2 ...]
Muss ich für jedes Feld Eingabefelder mit verschiedenen Bereichsvariablen generieren? Wie mache ich das?
Ist das komplexere dann dachte ich, und es muss eine Richtlinie sein? Wenn ja, zeig mir bitte, wie das geht.
Danke.
Danke. Das ist nett. Ich habe auch etwas über 'track by' gelernt. Ist es sinnvoll, aus Performance-Gründen immer 'track by' zu verwenden? –
Gern geschehen :) In komplexeren Situationen ja (http://www.bennadel.com/blog/2556-using-track-by-with-ngrpeat-in-angularjs-1-2.htm). In diesem Fall ist es möglich, mehrere Felder mit demselben Zeichenfolgenwert zu verwenden. Andernfalls würden Sie Folgendes erhalten: "Duplikate in einem Repeater sind nicht zulässig. Verwenden Sie den Ausdruck "Track by", um eindeutige Schlüssel anzugeben. ' – tasseKATT
Ich weiß, das ist ein alter Thread, muss noch etwas fragen. Wie zeige ich Daten in dem Formular an, das mit dem obigen Code erstellt wurde? Jede Hilfe würde geschätzt werden –