我使用ng-repeat过滤AngularJS中的对象列表:
tableView
如果用户将感叹号作为搜索框中的第一个字符,则Angular会将其解释为否定符号。因此searchBar
将返回除MyAppliction之外的所有应用程序。
我尝试使用自定义函数作为the Angular documentation for filter中的描述,但感叹号永远不会进入函数。
我发现代码在AngularJS source code中经历了以下函数,这基本上强制感叹号得到特殊处理:
UISearchDisplayController
我目前的解决方案"是将过滤器对象更改为:
int repeated = v.GroupBy(x => x).Where(g => g.Count() == 2).Count();
但是,如果有人使用<tr ng-repeat="application in page.applications | filter: {DisplayName:page.ApplicationSearchValue}">
{{application.DisplayName}}
</tr>
启动搜索框,QA会发现问题仍然存在,这只是时间问题。
是否有处理这种情况的常见模式?
答案 0 :(得分:1)
我最终使用了我在这篇文章中修改过的指令。 https://stackoverflow.com/a/15346236/2908576
MyApp.directive("noNegation", [function() {
return {
require: "ngModel",
link: function(scope, element, attrs, ngModelController) {
ngModelController.$parsers.push(function(data) {
while (data.indexOf("!") == 0)
data = data.substring(1);
return data;
});
}
};
}]);
它会忽略输入开头的所有感叹号。这意味着搜索!!!MyApplication
仍会返回MyApplication,即使感叹号不在名称中。