在 ng-repeat 中有条件地应用 angualrjs 自定义过滤器

conditionally apply angualrjs custom filter in ng-repeat

我想使用 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原则了! 我在 提到了问题 但是我不能在模板中使用语法 filter:myCustomFilter 所以我需要一些其他的解决方法。

需要帮助。

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

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">

或者,如果您想遵循 ,您可以在第一个(也是唯一一个)参数为 undefined:[=16 时禁用过滤器=]

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'">