使用ng-repeat和filter,如何判断哪些项目可见?

aml*_*amm 12 html javascript 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>
Run Code Online (Sandbox Code Playgroud)

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

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

为简单起见,我在这里大大简化了我的代码示例,因为这个问题不需要更多细节.有没有办法做我正在思考或做的事情我需要再次执行"搜索"?

azi*_*ium 18

您可以将过滤后的数组绑定到视图中的另一个范围变量,然后在控制器中访问该变量.

视图:

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

控制器:

$scope.toggleAll = function () {
  angular.forEach($scope.filteredItems, function (item) {
    // do stuff
  })
}
Run Code Online (Sandbox Code Playgroud)