我想根据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,所以我需要另一种解决方法。
需要帮助。
答案 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'">