如何将动态变量用于角度

时间:2015-06-05 05:10:04

标签: javascript angularjs

我有一个表单,我可以根据这个表单创建一些输入框。下面给出了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));

请有人帮我找到我做错了或者有可能做什么???

2 个答案:

答案 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中访问对象属性有两种方式:

  1. 如果您知道姓名,可以$scope.new.var1name
  2. 如果名称是动态的,那么您可以使用括号语法$scope['new.var'+i+'name']