使用感叹号作为AngularJS过滤器的第一个字符

时间:2016-12-05 16:58:21

标签: angularjs angularjs-filter

我使用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会发现问题仍然存在,这只是时间问题。

是否有处理这种情况的常见模式?

1 个答案:

答案 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,即使感叹号不在名称中。