【问题标题】:Lost some behavior when implementing angular js custom filter function实现 Angular js 自定义过滤器功能时丢失了一些行为
【发布时间】:2013-11-27 16:06:23
【问题描述】:

因为我只需要从数组中过滤一些特定的键(名字或姓氏),所以我必须实现一个自定义过滤器(如果我错了,请纠正我)。

所以我在相应的控制器中实现了一个功能(一旦我开始工作,可能会创建一个特定的过滤器)。 这是函数:

 $scope.mama = function (baba) {
            return baba.firstName == $scope.query || baba.lastName == $scope.query;

        };

这是模板:

Search: <input ng-model="query">

<div ng-controller="ListProscontroller" ng-init="listpros()">
    <ul>
        <li ng-repeat="item in prosItems.results | filter:mama"> {{item.firstName}} </li>
    </ul>
</div>

这样做确实只按预期搜索名字或姓氏。但我失去了几个好处:

  • 区分大小写
  • 它只会匹配完全匹配:如果名字是“Bob”,当释放按键“o”时“Bo”将不匹配。但它当然会匹配“Bob”的“Bob”。 如何修改此函数以保留默认过滤器行为?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    文本匹配很棘手。 不考虑重音字符(但不区分大小写匹配和子字符串匹配)的解决方案是:

    $scope.mama = function (baba) {
        var firstName = baba.firstName.toUpperCase(),
            lastName = baba.lastName.toUpperCase(),
            query = $scope.query.toUpperCase();
        return firstName.indexOf(query) >= 0 || lastName.indexOf(query) >= 0;
    }
    

    【讨论】:

    • Angular's built-in filter 本身只做小写,所以关于 I18N 你的答案应该没问题。尽管对于这种类型的“仅搜索此属性子集”需求,没有通用的 Angular 解决方案,但我感到很惊讶。
    猜你喜欢
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2017-07-07
    • 1970-01-01
    • 2019-04-12
    • 2019-10-15
    相关资源
    最近更新 更多