2016-11-29 68 views
1

这是我的angularjs代码,用于动态创建输入文本字段。如何将ng-model添加到动态创建的输入文本字段

<form action="demo_form.asp" method="get"> 
    //statically added textfields 
    value1:<input type="text" placeholder="Give inspection details. Eg. 10:00." ng-model="store.static1" required /> 
    value2:<input type="text" placeholder="Give inspection details. Eg. 10:00." ng-model="store.static2" required /> 

    //dynamically adding textfields 
    enter the number of new fields to be created:<input type="number" id="in_num" /> 
    <button type="button" id="submit"> Create text fields </button> 
    <div id="dynamicInput" ></div></td> 

    //button to add values to the database 
    <button type="submit" ng-click="addValues($event)> add to database </button> 
</form> 

“NG点击=” addValues($事件)“”帮助这些值添加到我已经做了MongoDB数据库。

JavaScript代码,用于制造这些领域是:

$(document).ready(function(e){ 
$('#submit').click(function(){  
var inputIndex = $('#in_num').val(); 
    for(var i=0; i<inputIndex; i++) 
    { 
     $('#dynamicInput').append('<input type=text id=id_'+ i +' style=width:100%; padding:12px 15px ng-model=store.value'+i+'/>'); 
    } 
}); 
}); 

在点击“添加到资料库”按钮,只从第一和第二文本框的值歌厅添加到数据库中,但是从增加不是值动态创建文本字段。有什么办法可以做到吗?

+0

你正在混合jQuery和角度的方式,不工作得很好。这没有干净的解决方法。 –

+1

**建议:**不要用jQuery生成元素,你可以通过'ng-repeat'来创建一个对象数组和循环! '模型'将在那里设置! –

回答

0

问题是,当你用jQuery将它们添加您的动态添加输入字段没有click事件。仅添加ng-click是不够的。您将不得不使用$compile来让角度解析这个元素。

但是,更聪明的方法是根本不使用jQuery,并让字段本身由ng-repeat生成。

angular 
 
    .module('app', []) 
 
    .controller('dynamicFieldsController', dynamicFieldsController); 
 

 
dynamicFieldsController.$inject = ['$scope']; 
 

 
function dynamicFieldsController($scope){ 
 
    var vm = this; 
 
    vm.numOfFields = 0; 
 
    vm.fields = []; 
 
    vm.add = function() { 
 
    for (var i = 0; i < vm.numOfFields; i++) { 
 
     var index = vm.fields.length; 
 
     vm.fields.push(index); 
 
    } 
 
    } 
 
}
input{ 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app='app' ng-controller='dynamicFieldsController as vm'> 
 
    <input placeholder='num of fields' ng-model='vm.numOfFields'> 
 
    <button ng-click='vm.add()'>add</button> 
 
    <input type='text' ng-repeat='field in vm.fields' value='{{ field }}'> 
 
</div>

在这个例子中,你可以添加任意数量的元素并结合ng-click事件给他们。他们将开箱即用,因为有了角度分析。您的addValues函数现在只需使用vm.fields实际将值添加到数据库。