检查所有框切换方法不能按预期工作

时间:2014-01-07 14:44:52

标签: angularjs

我正在努力将一个核对清单切换为选中/取消选中,如下所示:

$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

2 个答案:

答案 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

您的代码中也有一些可能导致某些问题的{}。