Javascript 如何使用复选框过滤带有角度的结果?

Javascript 如何使用复选框过滤带有角度的结果?,javascript,html,angularjs,checkbox,angular-filters,Javascript,Html,Angularjs,Checkbox,Angular Filters,我正在尝试使用复选框应用过滤器 复选框显示正确: <div data-ng-repeat="cust in customers"> <input type="checkbox" data-ng-model="search.city" data-ng-true-value="{{ cust.city }}" data-ng-false-value=""/> {{ cust.city }} </div> {{cust.city} 但选中任何复选框时,

我正在尝试使用复选框应用过滤器

复选框显示正确:

<div data-ng-repeat="cust in customers">
    <input type="checkbox" data-ng-model="search.city" data-ng-true-value="{{ cust.city }}" data-ng-false-value=""/> {{ cust.city }}
</div>

{{cust.city}
但选中任何复选框时,不会发生任何情况:

<table>

    <!-- table heading goes here -->

    <tbody>
        <tr data-ng-repeat="customer in customers | filter : search">
            <td >
                {{ customer.firstName }}
            </td>
            <td >
                {{ customer.lastName }}
            </td>
            <td >
                {{ customer.address }}
            </td>
            <td >
                {{ customer.city }}
            </td>
        </tr>
    </tbody>
</table>

{{customer.firstName}
{{customer.lastName}
{{customer.address}
{{customer.city}
这张表显示了所有的顾客

我想要实现的是:当选中一个或多个复选框时,表必须只显示与选中复选框条件匹配的这些行


要使此功能正常运行,我必须做些什么?

看起来您正在提供一个客户列表,当选择一个或多个客户时,将显示与所选客户位于同一城市的客户表

为此,您需要一个自定义过滤器:

//定义我们的过滤器
app.filter('selectedCustomerCities',函数($filter){
退货功能(客户){
变量i,len;
//获取已检查的客户
var checkedCustomers=$filter('filter')(客户,{checked:true});
//添加检查以查看是否选择了任何客户。如果没有,则返回
//它们都没有过滤器
如果(checkedCustomers.length==0){
返回客户;
}
//从这些客户那里获得所有独特的城市
var cities={};
对于(i=0,len=checkedCustomers.length;i
然后,您的标记将更改为以下内容:


{{customer.city}
{{customer.firstName}
{{customer.lastName}
{{customer.address}
{{customer.city}

您可以看到它在这个Plunker上工作:

您可以将一个函数传递给AngularJS过滤器。例如:

将输入标记设置为:

<input type="checkbox" ng-model="search[cust.city]" /> {{ cust.city }}

如果希望在启动时显示所有客户,只需初始化
$scope。从
客户
数组中使用
城市
搜索


.

这几乎就是我想要的。默认情况下,将显示所有客户。选中某个或多个城市的复选框后,将应用筛选器。我已更新了答案。变化很小:
if(checkedCustomers.length==0){return customers;}
如果没有检查任何客户,则基本上返回所有客户。希望这一切对你有意义&如果你需要任何解释,请告诉我。这正是我想要的。除了这个
$filter('filter')(客户,{checked:true}),我几乎什么都懂
您能再解释一下吗?在AnguarJS中,您可以在HTML模板或JavaScript本身中使用。为了方便起见,AngularJS本身提供了一组过滤器,如等。它们还提供了过滤器“”,这是我在JavaScript中使用的。有关详细信息,请阅读筛选器服务+提供的筛选器“filter”的文档。为了避免
无法读取未定义的属性“length”错误(如果数据来自web api),您必须检查
是否(!angular.isUndefined(customers))
我更喜欢这个答案。它似乎也会更快。“如果您希望在启动时显示所有客户,只需从客户阵列中初始化$scope.search with city。”请您进一步解释一下。任何例子??如果两个或多个客户属于同一城市,此解决方案不会对复选框进行分组
<tr data-ng-repeat="customer in customers | filter:searchBy() ">
function ctrl($scope) {
  $scope.customers = [...];

  $scope.search = {};    
  $scope.searchBy = function () {
    return function (customer) {
      if ( $scope.search[customer.city] === true ) {
        return true;
      }
    }
  };
}