AngularJs,过滤器不区分大小写

use*_*805 9 javascript json filter angularjs angularjs-filter

我有一个json充满了小写和大写的数据.例如 :

[

  { "firstName":"JoHn" , "lastName":"DoE" }, 
  { "firstName":"aNnA" , "lastName":"smIth" }, 
  { "firstName":"PeTer" , "lastName":"JOnes" }

]
Run Code Online (Sandbox Code Playgroud)

而且我有类似的东西:

Search: <input ng-model="searchText">
        <table id="searchTextResults">
          <tr><th>Name</th><th>Phone</th></tr>
          <tr ng-repeat="friend in friends | filter:searchText">
            <td>{{friend.firstName}}</td>
            <td>{{friend.lastName}}</td>
          </tr>
        </table>
Run Code Online (Sandbox Code Playgroud)

我想要做的是搜索朋友而不看高箱和低箱.所以基本上当我在输入中键入"John","JOHN"或简称"john"时,它应该归还我的朋友John.

那么是否可以将不区分大小写的选项应用于过滤器?

Ale*_*yev 19

有一种方法可以打开case insensetive过滤器:

<div data-ng-repeat="item in items | filter : searchText : false"></div>
Run Code Online (Sandbox Code Playgroud)

Plunker

  • 我认为这应该是正确的,因为在https://docs.angularjs.org/api/ng/filter/filter中,它在`{{filter_expression | filter:expression:comparator}}`,如果`comparator` =`false`,则`false | undefined:一个函数的简写,它将以不区分大小写的方式查找子字符串匹配. (3认同)
  • @Alexander Vasilyev:这不是100%正确,因为它尝试以不区分大小写的方式匹配子字符串,所以例如在他的情况下,如果用户搜索字母'n',它将返回所有记录,因为它们都具有' n'在其中,最后一个属性用于严格的数学运算,如果为真则它将完全匹配,如果为false,它将是不区分大小写的子串匹配 (3认同)

Ste*_*ers 9

传递filter您在适用范围内定义的函数名称,其中使用字符串的toLowerCase.见ngFilter.功能签名很简单function (item) { ... }.

控制器中的示例JS:

$scope.filterOnlyFoo = function (item) {
    return item == "foo";
}
Run Code Online (Sandbox Code Playgroud)

示例HTML:

<div data-ng-repeat="item in items | filter: filterOnlyFoo"></div>
Run Code Online (Sandbox Code Playgroud)

Sample Plunker

  • 你是对的!它应该是两个谓词中的`$ scope.searchText.toLowerCase()`而不是`$ scope.searchText`! (2认同)