一尘不染

使用ng-repeat和filter,如何分辨哪些项目是可见的?

angularjs

我有使用Angular应用程序显示的一系列对象ng- repeat。我正在使用filter和搜索输入的值过滤掉项目。它按预期工作。但是,我有一个“全部选中” /“全部取消选中”选项,我只想选择列表中的
可见 项(那些符合当前搜索条件的项)。

在控制器中不执行相同逻辑(即indexOf在每个对象上使用搜索值)的情况下,如何确定当前由ng-repeat/ 过滤掉的项目filter

我的看法:

<input type="text" ng-model="searchValue">
<input type="checkbox" ng-model="checkAll" ng-change="toggleAll()">

<tr ng-repeat="item in items | filter:searchValue">
    <td>{{item.id}}</td>
    <td>{{item.name}}</td>
</tr>

我的控制器中的一个功能:

$scope.toggleAll() {
     for(var i in $scope.items){
         // how can I tell if this item is filtered out in the view?
     }
}

为了简化起见,我在这里大大简化了我的代码示例,因为这个问题不需要更多细节。有没有办法做我在想的还是我需要再次执行“搜索”?


阅读 306

收藏
2020-07-04

共1个答案

一尘不染

您可以将过滤后的数组绑定到视图中的另一个作用域变量,然后在控制器中访问它。

视图:

<tr ng-repeat="item in filteredItems = (items | filter:searchValue)">
  ...
</tr>

控制器:

$scope.toggleAll = function () {
  angular.forEach($scope.filteredItems, function (item) {
    // do stuff
  })
}
2020-07-04