【发布时间】:2014-04-30 14:24:34
【问题描述】:
我被这个小任务困住了。 我需要通过单击表单上的“添加”按钮来动态生成表单输入字段。 该表单应该创建数据库表模式。所以每个输入字段都是一个数据库表字段名。
我可以动态生成字段,但无法收集实际数据。
<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>
.. 和控制器
.controller('NewTableCtrl', function($scope) {
$scope.fields = [];
$scope.table = {};
$scope.addFormField = function () {
$scope.fields.push({});
}
$scope.submitTable = function () {
console.log($scope.table);
}
});
看起来很简单。当我单击“添加”按钮时,它会生成新的输入字段,但它使用相同的模型对象(显然)。这就是我的误解所在。我想如果我在控制器中声明$scope.fields = [];,那么重复的字段数据只会进入数组。但它只是在每个重复输入字段中回显输入。我现在明白这就是双向绑定的方式。
我这样想的原因是类似于普通的表单提交,其中重复的输入字段名称变成了 URL 编码表单数据中的一个数组。
那么我该如何解决呢?服务器需要获取这样的字段数组:fields: [field1, field2 ...] 我是否需要为每个字段生成具有不同范围变量的输入字段?我该怎么做?
这比我想象的更复杂吗?它需要一个指令吗?如果是,请告诉我如何执行此操作。
谢谢。
【问题讨论】:
标签: angularjs angularjs-directive angularjs-ng-repeat