如何使用angularjs过滤列表

时间:2014-12-05 09:34:14

标签: angularjs angularjs-scope angularjs-ng-repeat

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

Fiddle

我无法弄清楚我在这里做了什么错误整个列表我没有显示,一次只有单一选择。 对于我使用的单一选择

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

我不能让两个选择一起工作。

3 个答案:

答案 0 :(得分:1)

过滤器可以是chained together,如下所示:

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

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

这是Mark's小提琴的一个分支,展示了这种技巧: http://jsfiddle.net/2671uggu/

答案 1 :(得分:0)

请在代码中的任何位置使用相同的命名和案例

  • adminadministrator
  • 不同
  • adminAdmin
  • 不同

如果我理解正确,基本想法如下,

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

完整演示:http://jsfiddle.net/6rqL6zxh/

答案 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的过滤器似乎工作正常