我将通过这个示例小提琴演示使用比较器参数来过滤精确匹配....:
http://jsfiddle.net/api/post/library/pure/
优先级是1-100之间的数字,但是我将其作为文本输入并过滤为字符串 所以任何包含子串的数据也会通过ng-repeat ...就像当我输入1时它也会显示11,111,132等......这就是我遇到的:真正的比较器。
我已经阅读了其他的堆栈流程答案,建议编写自定义过滤器函数,但使用真正的比较器,看起来我可以实现我想要的目标:
<input type="text" class="form-control" id="search.priority"
title='Priority number to filter by'
ng-model="search.priority" >
<tr ng-repeat="workflowItem in workflows | filter:search:true">
<td>{{workflowItem.priority}}</td>
它只会过滤完全匹配。但是,显然当输入字段为空时它不会传递任何内容,因为没有任何内容与空字符串匹配。
我的问题是:是否有一种方法可以让ng-repeat在字段为空时仍显示所有内容,同时保持完全匹配过滤器?欣赏每个人的时间!
答案 0 :(得分:14)
您需要使用自定义比较器功能。它允许您执行严格的比较,除非谓词是假的。
您的标记将是:
<input type="text" class="form-control" id="search.priority"
title='Priority number to filter by'
ng-model="search.priority" >
<tr ng-repeat="workflowItem in workflows | filter:search:exceptEmptyComparator">
<td>{{workflowItem.priority}}</td>
在控制器上定义比较器功能:
$scope.exceptEmptyComparator = function (actual, expected) {
if (!expected) {
return true;
}
return angular.equals(expected, actual);
}
这应该可以解决问题。