【问题标题】:angularjs checkbox filter on expressionangularjs复选框过滤表达式
【发布时间】:2015-04-11 19:19:40
【问题描述】:

我正在尝试过滤单个复选框上的 ng-repeat 中的值是否大于 0,所以我希望能够做到这一点:

<input type="checkbox" ng-model="filter.uid" ng-true-value=">0" ng-false-value="0">filter if uid > 0

但是,ng-true-value 和 ng-false-value 不带表达式...所以我猜我需要创建一个自定义过滤器?这似乎应该是微不足道的,但我只想检查我是否遗漏了什么..

这是我的 jsFiddle 的链接:

https://jsfiddle.net/webmastersean/4m2d5n8u/39/

【问题讨论】:

    标签: angularjs angularjs-ng-repeat angularjs-filter


    【解决方案1】:

    由于真/假值已分配给您的模型filter.uid,因此无法使用值“>0”。

    您可以将复选框值存储在变量中,例如filterActive,并在您的 ngRepeat 中使用过滤器功能:

    $scope.filter = function(entry) {
        if($scope.filterActive) {
            return (entry.uid > 0) ? true: false;
        }
        return true;
    }
    

    查看分叉:https://jsfiddle.net/49qgbdk6/

    【讨论】:

    • 感谢塞巴斯蒂安,这行得通!但是,单击 clearFilter 后它会中断,因此现在尝试修复它:-/
    • 如果您想使用多个过滤器选项,请将它们保存到自己的变量中(就像您之前所做的那样),例如$scope.filterOptions,并将逻辑添加到过滤函数中。 jsfiddle.net/49qgbdk6/2
    【解决方案2】:

    内置的filter 过滤器仅支持谓词的否定。如果你的数字永远不会是负数,你可以过滤“not 0”:

    <input type="checkbox" ng-model="filter.uid" 
           ng-true-value="'!0'" ng-false-value="">
    
    <div ng-repeat="project in projects | filter: filter></div>
    

    Demo

    显然,这只适用于&gt;0。对于任何其他情况(例如,&gt;1),您需要自定义过滤器表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      相关资源
      最近更新 更多