2014-10-11 121 views
6

當我單擊頂部複選框時,如何選中網格上的所有複選框。此時它僅點擊當前頁面複選框。如果您可以模擬您的對普朗克的解決方案,非常感謝。提前感謝。帶有複選框的ngTable不會選中網格上的所有複選框

這裏是鏈接:Table with checkboxes

$scope.checkboxes = { 'checked': false, items: {} }; 

// watch for check all checkbox 
$scope.$watch('checkboxes.checked', function(value) { 
    angular.forEach($scope.users, function(item) { 
     if (angular.isDefined(item.id)) { 
      $scope.checkboxes.items[item.id] = value; 
     } 
    }); 
}); 

回答

11

我敢肯定,現在你已經想通了這一點,但因爲這個問題一直沒有答案,我一直在尋找一種方式來做到這這我已經更新如果有人絆倒了這個問題,那麼你將會成爲未來的參考。

http://plnkr.co/edit/PjTlyX?p=preview

有兩件事情要考慮,你要檢查所有的複選框,無論過濾或做檢查需要進行濾波中心。

設置一個$ scope變量未過濾列表,如果你希望忽略數據源

var data = [{id: 1, name: "Moroni", age: 50, money: -10}, 
       {id: 2, name: "Tiancum", age: 43,money: 120}] 
$scope.data = data; 

的過濾,或者如果你寧願只選擇已被過濾設置orderedData另一個$範圍複選框在$ scope.tableParams方法中

var orderedData = params.sorting() ? 
        $filter('orderBy')(data, params.orderBy()) : 
        data; 
      orderedData = params.filter() ? 
        $filter('filter')(orderedData, params.filter()) : 
        orderedData; 
      $scope.orderedData = orderedData; 

然後你可以自由選擇以往的方式,你更喜歡通過簡單地改變$ scope.users到複選框變量喜歡下面

$範圍變量
// watch for check all checkbox 
$scope.$watch('checkboxes.checked', function(value) { 
    angular.forEach($scope.users, function(item) { 
     if (angular.isDefined(item.id)) { 
      $scope.checkboxes.items[item.id] = value; 
     } 
    }); 
}); 
+0

哇..它真的很好,謝謝很多:)其實我沒有任何解決方案,直到現在。再次感謝:) – Sampath 2015-06-26 11:47:50

+0

太棒了!正是我需要的。謝謝。我更新了它的AngularJS 1.6.4和ngTable 1.0.0:http://plnkr.co/edit/km1Sjv?p=preview – 2017-04-27 06:42:50

1

這是從官方文檔中提供的另一種方法。

Codepen Demo here

您可以創建一個像

<script type="text/ng-template" id="headerCheckbox.html"> 
    <input type="checkbox" ng-model="demo.checkboxes.checked" class="select-all" value="" /> 
</script> 

你的頭模板,並在表中添加一列像

<td header="'headerCheckbox.html'"><input type="checkbox" ng-model="demo.checkboxes.items[row.id]" /></td> 

,看模型演示.checkbox.checked更改

$scope.$watch(function() { 
     return self.checkboxes.checked; 
    }, function(value) { 
     angular.forEach(simpleList, function(item) { 
     self.checkboxes.items[item.id] = value; 
    }); 
});