由于 ng-repeat 为每个类型/项目/迭代创建一个子范围,我们需要将每个类型的 ng-model 与父范围相关联,而不是子范围。一种方法是使用 $parent:
<input type="checkbox" ng-model="$parent[type]">{{ type }}
如果 $scope.types 的定义与@Alex的答案一样,则如果单击相应的复选框,则 properties typeOne
, typeTwo
, andtypeThree
将出现在父范围上,并且该属性的值将为true
。如果再次单击选中的复选框,则该属性保持不变,并且值将切换为false
。因此,您的代码必须检查不存在的属性以及值设置为 true 或 false 的存在的属性。这有点乱。
我更愿意在父作用域上预定义一个对象数组,其中每个对象都有类型(名称)和一个布尔值来指示它是否被选中:
$scope.types = [
{name: 'typeOne', selected: false},
{name: 'typeTwo', selected: false},
{name: 'typeThree', selected: false}];
然后, $parent 不是必需的(因为“type”的值将是对父对象的引用,而不是父属性(原始)值的副本):
<input type="checkbox" ng-model="type.selected">{{ type.name }}
See also What are the nuances of scope prototypal / prototypical inheritance in AngularJS? to learn more about ng-repeat and child scopes.