2013-07-25 14 views
21

Próbuję wygenerować dane wejściowe formularza z ng-repeat. Uwaga: "niestandardowe pola" to tablica nazw pól: ["Wiek", "Waga", "Pochodzenie etniczne"].AngularJS: ng-model inside 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> 

Jaki jest najlepszy/poprawny sposób ustawienia "modelu ng"? Chciałbym wysłać go na serwer jako person.customfields.'fieldname ' gdzie nazwa_pola pochodzi z "pola w niestandardowych polach".

Odpowiedz

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); 
    } 
} 

Można go here spróbować.

Aktualizacja:

Do walidacji, sztuką jest postawić <ng-form> wewnątrz repeater. Proszę try.

+0

Mam [przedłużono jsfiddle] (http://jsfiddle.net/vorburger/jqbGf/1/), w tym wymagane sprawdzanie poprawności pola, ale to nie robi ' t pracy .. czy masz jakiś pomysł, jak to działa? Założenie wszystkich wymaganych pól tylko ze względu na przykład; można odczytać z modelu, ale nie ma to znaczenia dla zilustrowania problemu. Jest to bardzo podobne do [mojego pokrewnego problemu (który ma bardziej elastyczne pole niestandardowe "ścieżka" dodatkowo)] (http://stackoverflow.com/questions/17841915/angularjs-ng-model-form-driven-by- ng-repeat-over-ui-model-description-data-how-t) – vorburger

+1

@vorburger Zaktualizowany. Proszę spróbować. – zsong

+0

To działa - jesteś geniuszem !! ;) Zauważyłem jednak, że 1. przełączyłeś się na zagnieżdżony formularz ng i 2. naprawiono ucieczkę w ng-show przy pomocy myForm ['\ {\ {field \} \}']. $ Error.required. .. z ciekawości zmieniłem 1. i zachowałem 2.] (http://jsfiddle.net/vorburger/jqbGf/4/) i nadal działa - czy czegoś brakuje? PS: Zaktualizuję swój powiązany problem. – vorburger

6

Powinno być:

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

To nie zadziałało. – 502502

+5

Musisz utworzyć '$ scope.pers on = {customfields: {}}; '@Finnayra – finishingmove

+0

Dzięki @finishingmove – 502502

-1

Spróbuj NG-Model = "person.customfields." {{}} pole przeniósł cudzysłowów

+0

Nie próbowałem tego, ale mam działający kod dla rodzaju podobnej sprawy. Filtrowanie na podstawie właściwości (nazwa wybrana z rozwijanego menu) – avi

3

Każdy, kto kończy się tutaj ng-model wewnątrz ng-repeat

http://jsfiddle.net/sirhc/z9cGm/

powyższy link ma dobry opis, jak go używać z przykładami:

+2

Powinieneś opisać rozwiązanie. – smartmeta

+0

Akr powinien rzeczywiście opisać rozwiązanie, ale sam przykład Akr jsfiddle jest absolutnie fantastyczny i pouczający.Zasadniczo wiążą się z dowolną tablicą obiektów, które same zawierają pożądane obiekty. – JasonNew