2013-10-17 31 views
2

我有一个基本的crud应用程序,并且我隐藏了表中的列以显示用户想要查看的输入。我设法通过将ng-model绑定到表列并将相同模型绑定到复选框来显示/隐藏输入,因此在复选框被选中时隐藏。AngularJS将模型绑定到ngRepeat(并评估它)

因为我有很多数据,我不想在我的模板中保留输入,所以我决定改为ng-repeat

赫雷什我的控制器:

// simplified for this Q 
$scope.columns = [ 
    { name: '#ID', checked: false, model: 'checkedId' }, 
    { name: 'Container', checked: false, model: 'checkedContainer' }, 
    { name: 'Type', checked: true, model: 'checkedType' } 
]; 

这是在我的HTML(它被呈现前):

<label ng-repeat="col in columns"> 
    <input type="checkbox" name="cols[]" value="{{col.name}}" 
     ng-checked="col.checked" ng-model="col.model"><span>{{col.name}}</span> 
</label> 

呈现的HTML看起来像这样:(用于第二项阵列中的[阵列插槽1])

<label ng-repeat="col in columns" class="ng-scope"> 
    <input type="checkbox" name="cols[]" value="Container" 
     ng-checked="col.checked" 
     ng-model="col.model" class="ng-pristine ng-valid"> 
    <span class="ng-binding">Container</span> 
</label> 

我隐藏这样的元素:

<input type="checkbox" ng-model="checkedContainer"><span>checkedId</span> 

即该元件要隐藏看起来像这样(另一中继器)

<td class="check-element" ng-hide="checkedContainer">{{ c.container }}</td> 

所以毫克模型绑定的列,并且,如果我手动插入输入像上面,它的工作原理。但是,当循环它没有。我认识到问题在于循环。这样模型就不会被评估,但在html中保持“col-model”。有没有办法将模型评估到$scope.columns阵列中的相应模型?

基本上我想我的$scope.columns.model被评估为它所属的模型。我设法将改变mg-model的值绑定到ng-bind,但这不适用于数据绑定,因为我了解它的唯一方法。

回答

2

解决方法,在你的范围添加$scope.scope = $scope;然后分配模式,如:

ng-model="scope[col.model]" 

工作例如:http://jsfiddle.net/cherniv/Ydbhj/

UPDATE:知道了!正如我们所知,ng-repeat创建一个新的scope,所以这会在这种情况下工作:

ng-model="$parent[col.model]" 

而且没有必要$scope.scope = $scope;

最终的解决方案:http://jsfiddle.net/cherniv/4CTgr/

+0

哇!那很快!非常感谢先生!这完美的作品! – stormpat

+0

@PatrikStorm欢迎您,看看我的更新 – Cherniv

+0

好的,再次感谢!我现在使用$父范围。 – stormpat