Utknąłem z tym małym zadaniem. Potrzebuję dynamicznie generować pola wprowadzania formularzy, klikając przycisk "Dodaj" w formularzu. Formularz ma utworzyć schemat tabeli bazy danych. Zatem każde pole wejściowe jest nazwą pola tabeli DB.Generowanie dynamicznych pól wprowadzania formularzy i zbieranie danych pola w tablicy
Generuję pola dynamicznie, ale mam problemy ze zbieraniem rzeczywistych danych.
<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>
.. a kontroler
.controller('NewTableCtrl', function($scope) {
$scope.fields = [];
$scope.table = {};
$scope.addFormField = function() {
$scope.fields.push({});
}
$scope.submitTable = function() {
console.log($scope.table);
}
});
Wygląda proste. Kiedy klikam przycisk "Dodaj", generuje nowe pole wejściowe, ale robi to z tym samym obiektem modelu (obraźliwie). I tutaj leży moje nieporozumienie. Pomyślałem, że jeśli zadeklaruję $scope.fields = [];
w kontrolerze, powtarzające się dane pola zostaną wprowadzone do tablicy. Ale to tylko echo wejścia w każdym powtarzalnym polu wejściowym. Rozumiem teraz, że tak właśnie powinno być z dwukierunkowym wiązaniem.
Powodem, dla którego tak pomyślałem, jest analogia ze zwykłym przesyłaniem formularzy, w którym powtarzające się nazwy pól wejściowych stają się tablicą w zakodowanych adresach danych formularzy.
Jak rozwiązać ten problem? Serwer musi uzyskać tablicę takich pól: fields: [field1, field2 ...]
Czy muszę generować pola wejściowe z różnymi zmiennymi zasięgu dla każdego pola? Jak mam to zrobic?
Czy to jest bardziej złożone niż myślałem i musi to być dyrektywa? Jeśli tak, proszę, pokaż mi, jak to zrobić.
Dzięki.
Dziękuję. To jest miłe. Dowiedziałem się też o 'track by'. Czy korzystanie z 'track by' jest zawsze korzystne ze względu na wydajność? –
Nie ma za co :) W bardziej złożonych sytuacjach tak (http://www.bennadel.com/blog/2556-using-track-by-with-ngrepeat-in-angularjs-1-2.htm). W takim przypadku możliwe jest posiadanie wielu pól o tej samej wartości ciągu, w przeciwnym razie otrzymasz: "Duplikaty w repeater nie są dozwolone. Użyj wyrażenia "track by", aby określić unikatowe klucze. " – tasseKATT
Wiem, że to stary wątek, wciąż trzeba o coś zapytać. jak wyświetlić dane w formularzu utworzonym za pomocą powyższego kodu? Każda pomoc byłaby doceniana. –