我有一个表单,我可以根据这个表单创建一些输入框。下面给出了javascript代码。
for(i = 1; i <= c; i++) { //c = total input count
block = block + '<div class="row">'+
'<div class="form-group col-lg-12">'+
'<input id="name" ng-model="new.var'+i+'name" type="text" class="form-control">'+
'<input id="type" ng-model="new.var'+i+'type" type="text" class="form-control">'+
'</div>'+
'</div>';
}
document.getElementById("vars").innerHTML = block;
以上代码工作正常&amp;动态生成ng-model,如new.var1name , new.var1type , new.var2name , new.var2type
等等。
但是如何在我的控制器中获取这些变量? 如果我在我的控制器中生成这些变量,如下所示,那么它给出错误,它无法找到&#39; name&#39;。
var var1 = [];
for(i = 1; i <= c; i++) { //c = total input count
var item = {};
console.log('var'+i+'name', 'var'+i+'unit');
item['name'] = $scope.new.var+i+name;
item['type'] = $scope.new.var+i+type;
var1.push(item);
}
console.log(JSON.stringify(var1));
所以我使用了如下所示,但现在没有错误,但var1为空。
var var1 = [];
for(i = 1; i <= c; i++) {
var item = {};
console.log('var'+i+'name', 'var'+i+'type');
item['name'] = $scope.new['var'+i+'name'];
item['type'] = $scope.new['var'+i+'type'];
var1.push(item);
}
console.log(JSON.stringify(var1));
请有人帮我找到我做错了或者有可能做什么???
答案 0 :(得分:1)
我建议,不要在你的控制器中生成html,而是在你的视图中编写这个html,并使用angular的ng-repeat指令重复它:https://docs.angularjs.org/api/ng/directive/ngRepeat。这样的事情(未经测试):
<div ng-repeat="item in c track by $index">
<input id="name" ng-model="name[$index]" type="text" class="form-control">
<input id="type" ng-model="type[$index]" type="text" class="form-control">
</div>
然后,您应该能够从控制器中的$ scope访问名称并键入数组。如果'c'是原始输入的ng模型(定义了重复的次数),那么如果这是所需的功能,应该动态添加新字段吗?
EDITED
控制器中的
$scope.c = 5;
$scope.getNumber = function(num) {
return new Array(num);
}
在您的视图中
<div ng-repeat="i in getNumber(c) track by $index">
<input id="name" ng-model="name[$index]" type="text" class="form-control">
<input id="type" ng-model="type[$index]" type="text" class="form-control">
</div>
答案 1 :(得分:0)
使用$scope['new.var'+i+'name']
在JavaScript中访问对象属性有两种方式:
$scope.new.var1name
$scope['new.var'+i+'name']