Angular中的多个布尔过滤器?

时间:2016-12-30 17:24:30

标签: angularjs filter

我在一个用户中有一个设置节点,在一个项目中有三个布尔值和三个完全相同的值。我想根据要显示的用户设置过滤项目列表。

我搜索了高低,似乎没有任何工作:

项:

{"cash_back": true,
  "miles": false,
  "points": false
}

用户:

settings: {"cash_back": true,
  "miles": false,
  "points": true
}

HTML:

ng-repeat="item in items | filter: {cash_back: user.settings.cash_back, points: user.settings.points, miles: user.settings.miles} | limitTo: curLimit"

...但如果我有一个

它确实有效
filter: {cash_back: user.settings.cash_back}

显然只是为了这个设置...

任何人都可以帮忙吗?

我希望看到所有这些都是真的(如果点和里程都是真的,那么即使有一个点数值为false的里程项目,也会看到所有点数和里程项目)

1 个答案:

答案 0 :(得分:0)

我自己想通了。 (需要注意的一点是在我的用户节点中我跟踪项目ID列表 - 初始for循环的原因)我设置了一个过滤函数并比较了两个布尔值(我将每个值分隔成一个if语句用于调试和跟踪结果 - 这可以在以后清理。)

功能:

$scope.settingsFilter = function(card){
     var temp = {};
     for(c in $scope.cards){
       if ($scope.cards[c].id === card){
         temp = $scope.cards[c];
         break;
       }
     }
     if(($scope.user.settings.cash_back == true && temp.cash_back == true)){
       return true;
     }
     if(($scope.user.settings.points == true && temp.points == true)){
       return true;
     }
     if(($scope.user.settings.miles == true && temp.miles == true)){
       return true;
     }else{
       return false;
     }
     return false;
}

HTML:

ng-repeat="card in userCards | filter:settingsFilter track by $index"