【发布时间】:2015-02-03 20:57:32
【问题描述】:
我有一些使用 Angular 的 ng-repeat 渲染的数据。我想允许用户通过选中每个元素前面的复选框来选择视图中的元素。最简单的方法是为模型中的每个元素添加一个“选定”属性。但是,我更愿意更精细地分离关注点,而不是用 UI 的状态污染数据模型。此外,我正在将数据发送回服务器,并且我宁愿在这样做之前不必对其进行消毒。因此,IMO 最好的办法是有一个单独的选择模型。基本上我正在尝试做这样的事情:
控制器:
$scope.data = [
{'name': 'a', 'value': '1'},
{'name': 'b', 'value': '2'},
{'name': 'c', 'value': '3'}
];
$scope.selection = {'a': false, 'b': false, 'c': false};
$scope.createSelectionGetterSetter = function(name) {
return function(newValue) {
if (angular.isDefined(newValue)) {
selection[name] = newValue;
}
return selection[name];
}
};
查看:
<div ng-repeat='row in data'>
<input type='checkbox' ng-model='createSelectionGetterSetter(row.name)' ng-model-options='{ getterSetter: true }' />
<input type='text' ng-model='row.value' />
</div>
这里的想法是让createSelectionGetterSetter 创建一个闭包,将选择状态映射到选择模型中的正确元素。当然它不起作用,因为 Angular 期望在 ng-model 中有一个实际的 getter/setter 函数。
如何创建这样的闭包并将它们作为 getter/setter 传递给角度视图?
【问题讨论】:
标签: javascript angularjs