【问题标题】:Multiple Boolean Filter in Angular?Angular中的多个布尔过滤器?
【发布时间】:2017-01-04 00:28:27
【问题描述】:

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

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

项目:

{"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 的里程项目)

【问题讨论】:

  • 您的语法看起来正确。你确定你有符合用户设置的项目吗?设置和项目之间的所有三个设置都必须相同。
  • 什么不起作用? item.points 不等于 user.settings.points 所以什么都不会出现
  • 这是您的代码:jsfiddle.net/pbeoy2oh 它似乎正在工作。您可能需要学习How to Ask 并自己提供minimal reproducible example
  • 我想看看那些是真的。
  • 所以如果设置为ttf,我想查看所有的cash_back 和miles - 一个项目很少有两个或多个真实值。

标签: angularjs filter


【解决方案1】:

我自己想出来的。 (需要注意的一点是,在我的用户节点中,我跟踪了一个项目 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2016-10-18
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多