我想这样做:
[ ] all toppings
-----------------
[ ] mushrooms
[ ] peppers
[ ] extra cheese
[ ] artichokes
当用户检查或取消选中[]所有浇头时,个别浇头都会被设置为全部检查或全部未选中。
各个复选框工作正常。但是当控制器在setAll()
方法中迭代顶部列表时,设置每个的选择状态,UI不会显示更改。
$scope.items = [{id: 100, name: "mushrooms", price: 1.00}, ....]
<div>
<p><input type="checkbox" id="allToppings"
data-ng-click="setAll($event)"> all
</p>
<hr/>
<p data-ng-repeat="item in items">
<input type="checkbox" data-ng-model="item.selected"
data-ng-click="item.selected=!item.selected"> {{item.name}}
</p>
</div>
$scope.setAll = function (e) {
for (item in items) {
item.selected = (e.target.checked);
}
}
调用setAll()
方法,并正确设置每个项目的selected属性。让UI显示更改的正确方法是什么?浇头数组是否需要watched
?
答案 0 :(得分:0)
当迭代像for (item in items)
这样的数组时,item
将成为每个项目的索引。试试这个:
for (var i = 0; i < items.length; i++) {
items[i].selected = (e.target.checked);
}
答案 1 :(得分:0)
您可能希望使用框架自己的angular.forEach
$scope.setAll = function (e) {
angular.forEach(items, function(item, key) {
item.selected = e.target.checked;
});
}