【问题标题】:conditionally apply angualrjs custom filter in ng-repeat有条件地在 ng-repeat 中应用 angualrjs 自定义过滤器
【发布时间】:2015-08-19 22:19:03
【问题描述】:

我想使用 ng-repeat 根据模板中的输入调用自定义过滤器。 所以如果 myCondition 为真,那么我只想应用我的自定义过滤器切片,否则我不想应用切片过滤器。

        <div ng-repeat = "job in userjobs.matched_jobs | slice:'5' && myCondition">
            <div ng-include="'applydiv.html'"></div>
        </div>

上面的代码不起作用,因为切片过滤器在输入中变为真(5&&myCondition)

我可以在这里破解

    <div ng-if="!myCondition">
        <div ng-repeat = "job in userjobs.matched_jobs">
            <div ng-include="'applydiv.html'"></div>
        </div>
    </div>
    <div ng-else>
        <div ng-repeat = "job in userjobs.matched_jobs | slice:'5'">
            <div ng-include="'applydiv.html'"></div>
        </div>
    </div>

但是这样就不会遵循 DRY 原则了! 我在Making an angular filter conditional提出了问题 但我不能在模板中使用语法过滤器:myCustomFilter,所以我需要另一种解决方法。

需要帮助。

【问题讨论】:

  • 您可以在过滤器中添加myCondition 逻辑。例如,您可以将 filter 参数转换为使用该条件的函数。
  • @ryanyuyu 是的,您可以说这是我不想做的黑客攻击之一,因为它会影响使用此过滤器的其他人。谢谢回复。
  • 好的,是的。我没有任何想法。祝你好运。

标签: angularjs angularjs-filter


【解决方案1】:

如果您可以完全控制过滤器代码,则始终可以有一个参数来有效地禁用过滤器。为了不影响别人,把它作为最后一个可选参数:

app.filter("slice", function(){
  return function(input, number, disable){
    if (disable) return input;

    // the rest of your filter
  }
})
<div ng-repeat="item in items | slice:'5':!myCondition">

或者,如果您想关注example of disabling the built-in filter,您可以这样做,如果第一个(在这种情况下也是唯一的)参数是undefined,则禁用过滤器:

app.filter("slice", function(){
  return function(input, number){
    if (!angular.isDefined(number)) return input;

    // the rest of your filter
  }
})
<div ng-repeat="item in items | slice: (!myCondition || undefined) && '5'">

【讨论】:

    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2020-06-18
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多