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

时间:2015-08-19 13:00:05

标签: angularjs angularjs-filter

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

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

上面的代码无效,因为切片过滤器在输入中变为真(5&amp;&amp; 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,所以我需要另一种解决方法。

需要帮助。

1 个答案:

答案 0 :(得分:4)

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

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