ngGrid:如果存在某些条件,请不要选择行

时间:2014-11-04 21:13:33

标签: angularjs ng-grid

我的ngGrid上有一个Select all复选框,效果很好,但我有一种情况,当某些条件存在时,我不希望选择特定的行。因此,如果我单击选择全部它应该选择除检查失败的所有选项。这就是我的想法:

$scope.gridOptions.beforeSelectionChange = function (rowItem, event) {
            angular.forEach(rowItem, function(item) {
                if (item.entity.status == 'Accepted') {
                    item.selected = false;
                } else {
                    item.selected = true;
                }
            });
        } 

但这似乎不起作用。我该如何实现这一目标?我也试过了afterSelectionChange。我看到数据(selected属性)发生了变化,但选择没有改变。

select all按钮不是我添加的内容。当您启用复选框时,这是ngGrid附带的复选框 - 标题中的复选框。

enter image description here

1 个答案:

答案 0 :(得分:2)

您应该可以使用$scope.gridOptions.selectItem(index, true);

请参阅plunkr示例:http://plnkr.co/edit/BffRURwCX7pkNcEo0x6C?p=preview

编辑:

好的,我现在看到你需要什么。您可以覆盖CheckboxHeaderTemplate并将其绑定到其他功能。

$scope.gridOptions = { data: 'myData',
    showSelectionCheckbox: true,
    checkboxHeaderTemplate: '<input class="ngSelectionHeader" type="checkbox" ng-show="multiSelect" ng-model="allSelected" ng-change="selectAll(allSelected)"/>'
}

将selectAll定义为:

 $scope.selectAll = function(selectAll) {
    angular.forEach($scope.myData, function(data, index){
      if (!selectAll) {
        $scope.gridOptions.selectItem(index, false);
        return;
      }

      if(data.status != 'Accepted'){
        $scope.gridOptions.selectItem(index, true);
      }
    });
  }