2

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

因为我有很多数据,我不想将输入保留在我的模板中,所以我决定改为使用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 如下所示:(对于数组 [array slot 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>

所以 mg-model 绑定了列,如果我像上面一样手动插入输入,它就可以工作。但是当循环它没有。我发现问题出在循环上。这样模型就不会被评估,而是在 html 中保持为“col-model”。有没有办法将模型评估为相应的模型$scope.columns数组中的相应模型?

基本上我希望我$scope.columns.model被评估为它所属的模型。我设法通过将 mg-model 更改为 ng-bind 来绑定值,但这对数据绑定不起作用,因为我理解它只有一种方式。

4

1 回答 1

2

解决方法,添加$scope.scope = $scope;您的范围,然后分配模型,例如:

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

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

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

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

并且不需要在$scope.scope = $scope;

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

于 2013-10-17T09:12:55.997 回答