【问题标题】:Multiple parameters angular filter inside ng-repeatng-repeat 内的多参数角度过滤器
【发布时间】:2014-10-22 13:05:17
【问题描述】:

我正在尝试根据接收两个参数的自定义过滤器在 ng-repeat 中创建一个过滤器。同时,这些参数之一是重复对象的一个​​属性。

所以在我的 ng-repeat 代码中我有:

<tr ng-repeat="player in myTeam | bitwiseAnd:{firstNumber: player.Flag, secondNumber: type}">

但它不起作用。如果我调试它,过滤器接收到的第一个参数未定义。

我已阅读文档:https://docs.angularjs.org/guide/filter

我还阅读了 SO 中的多个相关问题

没有成功。

我创建了一个 plunker,当我将它用作表达式时,我们可以看到过滤器如何正常工作,因此问题可能是在 ng-repeat 语句中发送值。

这里是plunker: http://plnkr.co/edit/IGvDBq?p=preview

感谢您的宝贵时间

【问题讨论】:

    标签: javascript angularjs angularjs-ng-repeat angular-filters


    【解决方案1】:

    由于目的是显示通过过滤器的用户为“真”值,下面的代码可以提供帮助:

    <tr ng-repeat="player in myTeam" ng-if="player.Flag|bitwiseAnd:type"> 
    

    【讨论】:

    • 谢谢帕瓦西。它可以工作,但当我将它与 LimitTo 过滤器结合使用时就不行了。
    【解决方案2】:

    myTeam | bitwiseAnd 将bitwise 过滤器应用于整个team 数组,而不是玩家。所以效果就像写了

    <tr ng-repeat="player in true">
    

    如果过滤器返回 true。你想要的是一个返回数组的过滤器。您可以创建自己的过滤器或使用 filterfilter。后者很难与你的结合起来,但这是可能的。首先,您在控制器中定义谓词函数

    $scope.bitwiseAnd = function(type) {
      return function(player) {
        return $filter('bitwiseAnd')(player.Flag, type);
      }
    }
    

    该函数应用您的bitwiseAnd 过滤器,并且它本身应用于每个玩家。然后使用带有该功能的 filterfilter:

    <tr ng-repeat="player in myTeam | filter:bitwiseAnd(type)>
    

    Working Plunker

    【讨论】:

    • 它正在工作!我想过类似的解决方案,但认为会有更直接的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2015-09-15
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多