如何使用angularjs筛选列表

如何使用angularjs筛选列表,angularjs,angularjs-scope,angularjs-ng-repeat,Angularjs,Angularjs Scope,Angularjs Ng Repeat,我有一个对象数组,最初加载时没有适用的过滤器 然后,在用户选择上,应相应地显示组合列表 我不知道我在这里做错了什么,我没有显示整个列表,一次只显示一个选项。 对于我使用的单一选择 return $scope.filter[stat.userStatus] || noFilter($scope.filter); 我无法使两个选项同时工作。请在代码中的任何地方使用相同的名称和大小写 admin与administrator admin与admin 如果我理解正确,基本思路如下: $s

我有一个对象数组,最初加载时没有适用的过滤器 然后,在用户选择上,应相应地显示组合列表

我不知道我在这里做错了什么,我没有显示整个列表,一次只显示一个选项。 对于我使用的单一选择

 return $scope.filter[stat.userStatus] || noFilter($scope.filter);

我无法使两个选项同时工作。

请在代码中的任何地方使用相同的名称和大小写

  • 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;
    };
完整演示:

过滤器可以如下所示:

<div ng-repeat="item in mylist | filter:filterByStatus | filter:filterByRole">

过滤器从左到右运行,每个过滤器将过滤后的数组传递给下一个过滤器

这是一把小提琴叉,展示了这一技巧:

我能够让您的代码正常工作。这是一种修复方法,更好的方法是制作一个过滤器(也在处理这个问题)。 我所做的假设:-

按成员状态筛选意味着检查“用户状态”

按管理员状态筛选意味着检查“角色”

看看这个

我根据一个对象进行过滤,该对象根据$scope.filter进行更新

对HTML的更改

<div ng-repeat="item in mylist | filter:filterModel">

更新:Mark的过滤器似乎工作正常

可以肯定的是,代码中有$scope.filterByCategory=function(stat),它接受stat命名参数。您可以在过滤器中调用此函数,而不提供任何参数。所以这至少打破了你的过滤器。stat是列表的对象,两个选择一起工作,我猜是关于fiddleKunal的-你的问题,即使它包括一个fiddle,也不清楚。我们正试着猜你想要什么。在页面加载时,是否希望显示所有3个用户,然后在每个选择中筛选列表?标题、用户状态和角色中都有admin,这进一步增加了混淆。无论如何,我对你的问题的看法,这里是小提琴,如果它有帮助,这将给我的结果,而不是两者的结合filter@KunalVashist如果要应用这两个条件,请将最后一行更改为&。否则我不知道你想要什么:)
$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);