Angularjs筛选并选中所有复选框

Angularjs筛选并选中所有复选框,angularjs,Angularjs,我有一个显示的项目数组 <tr ng-repeat="i in items | filter:search_text" ...> 这些项目有一个复选框,表示“已选择”或“未选择”。 当我需要调用删除功能删除所有选定项目时,如何知道过滤器显示哪些项目 已选中(在复选框中选中)然后通过筛选隐藏的项目仍处于选中状态。我需要一种方法来知道当前屏幕上显示的是哪个项目。您可以使用$filter调用控制器中的过滤器 app.controller('MyCtrl', function($sco

我有一个显示的项目数组

<tr ng-repeat="i in items | filter:search_text" ...>

这些项目有一个复选框,表示“已选择”或“未选择”。 当我需要调用删除功能删除所有选定项目时,如何知道过滤器显示哪些项目


已选中(在复选框中选中)然后通过筛选隐藏的项目仍处于选中状态。我需要一种方法来知道当前屏幕上显示的是哪个项目。

您可以使用$filter调用控制器中的过滤器

app.controller('MyCtrl', function($scope, $filter){ 
   var filter = $filter('filter');

   $scope.items = [/* your items here */]

   $scope.selectAllFilteredItems = function (){
      var filtered = filter($scope.items, $scope.search_text);

      angular.forEach(filtered, function(item) {
         item.selected = true;
      });
   };
});

然后,您可以在ng单击中调用
selectAllFilteredItems()
,或者在需要的任何地方调用。

虽然不是非常完美,但它可以工作

在控制器中

var filter = $filter('filter');
$scope.item_ids = [];
$scope.selectAllFilteredItems = function (){
    var filtered = filter($scope.items, $scope.searchText);
    angular.forEach(filtered, function(item, key) {
        if($scope.item_ids.indexOf(item.id) == -1){
            $scope.item_ids.push(item.id);
            $scope.items[key].selected = true;
        }else{
            $scope.item_ids.splice($scope.item_ids.indexOf(item.id),1);
            $scope.items[key].selected = false;
        }
    });
};
然后,在表中有一个复选框可选择全部或取消全部选择

<table class='table table-striped'>
    <tr>
        <th><input type="checkbox" ng-click="selectAllFilteredItems()"></th>
    </tr>
    <tr ng-repeat="item in items | filter:searchText">
        <td><input type="checkbox" ng-model="item.selected"></td>
    </tr>
</table>


Thx,但我不确定我是否理解,搜索文本到哪里去了?你不是说forEach循环将被过滤吗?我将回答完全相同的=)这里有一个简单的提琴,提琴很棒!thx,但它缺乏检查哪些项目是实际选定的,Lol。。。谢谢@MarkRajcok。。。很明显,我今天的拼写错误太多了。如果选择一个元素后,其中一个元素会被取消选择呢?如何处理“全选”按钮的取消选择?