2013-07-25 5 views
21

Ich versuche, Formulareingaben mit ng-Wiederholung zu generieren. Hinweis: 'customFields' ist ein Array von Feldnamen: ["Age", "Weight", "Ethnicity"].AngularJS: ng-Modell in ng-repeat?

<div class="control-group" ng-repeat="field in customFields"> 
    <label class="control-label">{{field}}</label> 
    <div class="controls"> 
     <input type="text" ng-model="person.customfields.{{field}}" /> 
    </div> 
</div> 

Was ist der beste/richtige Weg, 'ng-model' einzustellen? Ich möchte es an den Server senden als person.customfields.'fieldname ' wo Feldname kommt aus "Feld in CustomFields".

Antwort

27
<div ng-app ng-controller="Ctrl"> 
    <div class="control-group" ng-repeat="field in customFields"> 
     <label class="control-label">{{field}}</label> 
     <div class="controls"> 
      <input type="text" ng-model="person.customfields[field]" /> 
     </div> 
    </div> 
    <button ng-click="collectData()">Collect</button> 
</div> 

function Ctrl($scope) { 
    $scope.customFields = ["Age", "Weight", "Ethnicity"]; 
    $scope.person = { 
     customfields: { 
      "Age": 0, 
       "Weight": 0, 
       "Ethnicity": 0 
     } 
    }; 

    $scope.collectData = function() { 
     console.log($scope.person.customfields); 
    } 
} 

Sie es here versuchen.

Aktualisiert:

Für die Validierung ist der Trick <ng-form> innerhalb des Repeaters zu setzen. Bitte try.

+0

Ich habe [die jsfiddle erweitert] (http://jsfiddle.net/vorburger/jqbGf/1/) einschließlich der erforderlichen Feldüberprüfung, aber das tut nicht t Arbeit .. hast du eine Idee, wie man das funktioniert? Angenommen alle Felder nur für das Beispiel erforderlich; könnte aus dem Modell gelesen werden, aber das ist irrelevant, um das Problem zu veranschaulichen. Dies ist sehr ähnlich zu [mein verwandtes Problem (das flexibleres benutzerdefiniertes Feld 'path' zusätzlich hat)] (http://stackoverflow.com/questions/17841915/angularjs-ng-model-form-driven-by- ng-repeat-über-UI-Modell-Beschreibung-Daten-wie-t) – vorburger

+1

@vorburger aktualisiert. Bitte versuche. – zsong

+0

Das funktioniert - du bist ein Genie !! ;) Allerdings habe ich bemerkt, dass Sie 1. zu verschachtelter ng-Form gewechselt haben und 2. in ng-show mit myForm ['\ {\ {field \} \}'] behoben haben. $ Error.required. .. aus Neugier habe ich [1. und 2. behalten] (http://jsfiddle.net/vorburger/jqbGf/4/) und es funktioniert immer noch - verpasse ich etwas? PS: Ich werde mein verwandtes Problem aktualisieren. – vorburger

6

es sein sollte:

<input type="text" ng-model="person.customfields[field]" /> 
+0

Das hat nicht für mich funktioniert – 502502

+5

Sie müssen '$ scope.pers erstellen on = {customfields: {}}; '@Finnayra – finishingmove

+0

Danke @finishingmove – 502502

-1

Versuchen Sie, diese ng-Modell = "person.customfields." {{Field}} bewegt, um die doppelte Anführungszeichen

+0

Ich habe das nicht versucht, aber ich habe Arbeitscode für einen ähnlichen Fall. Filterung basierend auf der Eigenschaft (Name ausgewählt aus Dropdown) – avi

3

Alle auf die Innenseite ng-repeat

Für ng-model hier endet http://jsfiddle.net/sirhc/z9cGm/

der obige Link hat eine gute Beschreibung, wie man ihn mit Beispielen verwendet

+2

Sie sollten die Lösung beschreiben. – smartmeta

+0

Akr sollte zwar die Lösung beschreiben, aber Akrs Beispielbeispiel selbst ist absolut fantastisch und informativ.Grundsätzlich binden Sie an jedes Array von Objekten, die selbst die gewünschten Objekte enthalten. – JasonNew