2013-08-06 50 views
8

我有一個JSON充滿lowcase和upcase DATAS的。 例如:AngularJs,過濾器不區分大小寫

[ 

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

] 

而且我有類似這樣:

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> 

我想要做的就是尋找一個朋友不看upcases和lowcases。 因此,基本上當我輸入「John」,「JOHN」或簡單地「john」時,它應該返回我的朋友John。

所以是有可能申請不區分大小寫的選項來過濾?

回答

7

傳遞一個函數名稱filter你上的適用範圍界定,在您使用字符串的toLowerCase。請參閱ngFilter。函數簽名是一個簡單的function (item) { ... }

例JS在你的控制器:

$scope.filterOnlyFoo = function (item) { 
    return item == "foo"; 
} 

示例HTML:

<div data-ng-repeat="item in items | filter: filterOnlyFoo"></div> 

Sample Plunker

+0

但我不想lowcase或upcase什麼。只是想知道如果不區分大小寫是可能的。 – user2462805

+0

您不必將原始值設置爲小寫,只需要一個臨時值(例如在表達式中)進行檢查。例如'item.toLowerCase()==「foo」'對於「FOO」是正確的,但不會改變'item'。 –

+0

我的輸入和ng-model有什麼關係呢? – user2462805

18

沒有打開的情況下insensetive過濾器的方式:

<div data-ng-repeat="item in items | filter : searchText : false"></div> 

Plunker

+3

我覺得這是應該是因爲在https://docs.angularjs.org/api/ng/filter/filter正確的,它說,在'{{filter_expression |濾波器:表達:比較}}',如果'comparator' ='FALSE',然後'假|未定義:短手一個函數,它會尋找一個字符串匹配在不區分大小寫way.' –

+2

@Alexander瓦西里耶夫:此不是100%正確的,因爲它試圖以不區分​​大小寫的方式匹配子字符串,例如在他的情況下,如果用戶使用字母'n'進行搜索,它將返回所有記錄,因爲所有記錄都有'n'最後一個屬性用於嚴格的數學運算,如果爲true,則它將完全匹配,如果爲false,則它將是不區分大小寫的子字符串匹配 –