2015-12-16 20 views
1

我有一个动态绑定Angular JS模型的奇怪问题。动态重复模型

$scope.addColumn = function() { 
    if(!$scope.field_column_name) return; 

    if(!$scope.columns) { 
     $scope.columns = [] 
    } 
    $scope.columns.push({ 
     name: $scope.field_column_name, 
     defaults: $scope.field_column_defaults 
    }); 
    $scope.field_column_name = $scope.field_column_default = undefined; 
    }; 

我的目标是所有的它来存储由用户添加的数据创建输入:

<tr ng-repeat="i in [].constructor(5) track by $index"> 
    <td ng-repeat="column in columns"> 
    <input type="text" ng-model="column.defaults[i]" class="form-control"> 
    </td> 
</tr> 

我使用定义列。问题是,因为所有输入看起来像是同一个模型(其中一个输入的值也显示在其他输入中)。为什么?

的jsfiddle:http://jsfiddle.net/tz6fsz1o/5/

+0

显示你如何定义在你的控制器列 – suvroc

+0

@suvroc我加了方法 – Siper

+0

我试图重现你的错误,但没有成功:http://jsfiddle.net/tz6fsz1o/1/尝试在JsFiddle做到这一点 – suvroc

回答

0

你有错误创建rows_array

尝试http://jsfiddle.net/tz6fsz1o/6/

$scope.$watch('rows', function(){ 
    $scope.rows_array = []; 
    for(var i=0;i<$scope.rows;i++){ 
     $scope.rows_array.push(i); 
    } 
    }, true); 
+0

这就是我做了什么和完美的工作:)我只是用这个来代替循环:'Array.apply(null,{length:$ scope.rows})。map(Number.call,Number);' – Siper

+0

是,这是一个好主意。我用循环以简单的方式显示你应该做什么 – suvroc

1

我想应该是这样的:

<tr ng-repeat="i in [].constructor(5)" ng-init="outerIndex = $index"> 
    <td ng-repeat="column in columns"> 
     <input type="text" ng-model="columns[$index].defaults[outerIndex]" class="form-control"> 
    </td> 
</tr> 

注意你需要如何外环$index存储到辅助变量,以访问它的内部循环。

演示:http://jsfiddle.net/tz6fsz1o/7/

0

ng-model="column.defaults[i]"结合各个领域,这意味着每个字段存在于columns数组将绑定在相同的模型属性上。 ..例如两者都是column.foocolumn.bar结合columnt.default[i] ...

您可以修复它绑定在column可变文本字段,例如:

<td ng-repeat="column in columns"> 
 
     <input type="text" ng-model="column.foo" class="form-control"> 
 
</td>