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;
}
}
};
}