我正在努力将一个核对清单切换为选中/取消选中,如下所示:
$scope.checkAllToggle = function(dtProvider, destiny, ev) {
$(ev.currentTarget).parent().find('span').html());
data[destiny] = [];
if ($(ev.currentTarget).parent().find('span').html()=='Check all') {
for (var val in data[dtProvider]) data[destiny].push(data[dtProvider][val].id);
$(ev.currentTarget).parent().find('span').html('Uncheck all');
}
else $(ev.currentTarget).parent().find('span').html('Check all');
}
切换按钮的标签每次都会更改,但只有在单击2次后才会检查复选框的状态,从每次点击3点开始更改。 怎么了?
追加
if(!$scope.$$phase) $scope.$apply();
该方法没有区别,因为将$ scope添加到数据
plunker中的代码:http://plnkr.co/edit/Zf6UzLbC4osRov7IR5Na?p=preview
答案 0 :(得分:1)
而不是那样做,这将是更简单的方法。
制作主输入并将其指定给模型。
<input type="checkbox" ng-model="master">
然后让你的其他输入像这样绑在主人身上。
<input type="checkbox" ng-model="box1" ng-checked="master">
<input type="checkbox" ng-model="box2" ng-checked="master">
<input type="checkbox" ng-model="box3" ng-checked="master">
以下是这些变化的掠夺者。 Master Checkbox Plunker
答案 1 :(得分:0)
通过这样做我让你的傻瓜工作。
$scope.checkToggle = function(dtProvider, destiny, ev) {
$scope.data[destiny] = [];
if ($(ev.currentTarget).parent().find('span').html() == 'Check all') {
for (var val in $scope.data[dtProvider]){
$scope.data[destiny].push($scope.data[dtProvider][val].id);
$(ev.currentTarget).parent().find('span').html('Uncheck all');
}
} else {
$(ev.currentTarget).parent().find('span').html('Check all');
}
$scope.$apply();
};
如果安全地调用if(!$ scope。$$ phase){$ scope。$ apply();},我无法让它工作,但它正在使用直接$ scope。$ apply()。这可能与rootScope有关,需要以不同的方式安全地调用。
请参阅此链接:https://coderwall.com/p/ngisma
您的代码中也有一些可能导致某些问题的{}。