我最初在加载时有一个对象数组,没有适用的过滤器 那么应该相应地显示用户选择组合列表。
我无法弄清楚我在这里做了什么错误整个列表我没有显示,一次只有单一选择。 对于我使用的单一选择
return $scope.filter[stat.userStatus] || noFilter($scope.filter);
我不能让两个选择一起工作。
答案 0 :(得分:1)
过滤器可以是chained together,如下所示:
<div ng-repeat="item in mylist | filter:filterByStatus | filter:filterByRole">
过滤器从左向右运行,每个过滤器将过滤后的数组传递给下一个过滤器。
这是Mark's小提琴的一个分支,展示了这种技巧: http://jsfiddle.net/2671uggu/
答案 1 :(得分:0)
请在代码中的任何位置使用相同的命名和案例
admin
与administrator
admin
与Admin
如果我理解正确,基本想法如下,
$scope.filterByCategory = function (stat) {
//check if user has a status matching checkbox select
var by_status = $scope.filter[stat.userStatus];
//check if user has a role that matching dropdown list select
var by_roles = stat.roles.indexOf($scope.filter.selectedSearch) !== -1;
return by_status || by_roles; //statisfy either of two will return true;
};
答案 2 :(得分:-1)
我能够让您的代码正常运行。这是一种修复,更好的方法是制作一个过滤器(也就是这个)。 我做出的假设: -
按成员状态过滤器表示检查'userStatus'
通过ADMIN状态过滤器意味着检查“角色”
查看此Plnkr
我根据基于$ scope.filter更新的对象进行过滤。
对HTML的更改
<div ng-repeat="item in mylist | filter:filterModel">
对JS的更改
$scope.filterModel =
{
"userStatus":"",
"roles" : ""
}
$scope.$watch('filter', function() {
var myModel =
{
"userStatus":"",
"roles" : ""
}
if($scope.filter.administrator && $scope.filter.lead)
{
myModel.userStatus="";
}
else if($scope.filter.administrator)
{
myModel.userStatus="admin";
}
else if($scope.filter.lead)
{
myModel.userStatus="lead";
}
else
{
myModel.userStatus="";
}
if(angular.equals($scope.filter.selectedSearch,'Default'))
{
myModel.roles="";
}
else
{
myModel.roles=$scope.filter.selectedSearch;
}
$scope.filterModel=myModel;
},true);
更新:Mark的过滤器似乎工作正常