2013-12-11 67 views
1

我想了解AngularJS中的「過濾器」過濾器。從文檔瞭解,它也需要第二個參數。如果通過爲「真」,則執行嚴格的比較。過濾器的第二個參數不起作用

的HTML

<fieldset> 
    <legend>Array of objects (Search all properties)</legend> 
    <input type="text" ng-model="searchObject" /> 
    <ul> 
     <li ng-repeat="value in arrOfObjects | filter: searchObject: true"> 
      <span>{{value.firstName}}</span> 
      <span> {{value.lastName}}</span>: 
      <span><strong>{{value.email}}</strong></span> 
     </li> 
    </ul> 
</fieldset> 

JS的

$scope.arrOfObjects = [ 
    { 
     firstName: "Anup", 
     lastName: "Vasudeva", 
     email: "[email protected]" 
    }, 
    { 
     firstName: "Vijay", 
     lastName: "Kumar", 
     email: "[email protected]" 
    }, 
    { 
     firstName: "Virat", 
     lastName: "Kohli", 
     email: "[email protected]" 
    } 
]; 

我所期待的,如果我輸入 「阿努普」,它會嘗試進行精確匹配的所有屬性和將無法返回任何東西。因此,我應該看到一個空的列表。

我錯過了什麼。

+2

它不會返回'aNuP'什麼:http://plnkr.co/edit/F2lbGkgADxV8tK8pZ0Rs?p=preview什麼是你看到?你正在使用哪個版本的Angular? –

+2

按預期工作在這裏:http://jsfiddle.net/C7vfp/ – KayakDave

+0

@KayakDave,非常感謝。你能告訴我我的代碼有什麼問題嗎? –

回答

2

這是一個plunker,顯示瞭如下解釋:http://plnkr.co/edit/b1vuJV4RFNQSdpfaw0Pd?p=preview

上的對象角過濾功能通過比較對象的字段,以查看它們是否包含過濾條件,而忽略大小寫。這給出了一個廣泛的用法,可以通過添加第二個布爾參數true來指示您想要刪除contains規則來縮小範圍。

在您的例子:

<fieldset> 
    <legend>Array of objects (Search all properties)</legend> 

    <input type="text" ng-model="searchObject" /> 

    <ul> 
     <li ng-repeat="value in arrOfObjects | filter: searchObject: true"> 
      <span>{{value.firstName}}</span><span> {{value.lastName}}</span>: <span><strong>{{value.email}}</strong></span> 
     </li> 
    </ul> 
</fieldset> 

打字VasudevaAnup[email protected]將每個過濾掉所有,但第一個記錄,因爲在單場完全匹配的。因此,任何字段上的完全匹配都會導致顯示記錄。

拆除「真」:

<li ng-repeat="value in arrOfObjects | filter: searchObject"> 

給人以更大的包容設置,因爲它看起來的表達在任何領域,而忽略情況下使鍵入字母a,它出現在一個或多個字段中的所有對象,列出所有對象。

要過濾單個字段的對象使用以下格式:

<li ng-repeat="value in arrOfObjects | filter: {lastName :searchObject}"> 

,同樣可以添加第二個布爾參數,以獲得精確的匹配:

<li ng-repeat="value in arrOfObjects | filter: {lastName :searchObject}:true"> 

最後,你可以創建一個自定義過濾器,通過在控制器中定義一個函數來爲給定的匹配返回true或false。

<li ng-repeat="value in arrOfObjects | filter: myEmailFilter"> 

並在您的控制器中寫入實際的過濾器。

$scope.myEmailFilter = function(value) { 
    console.log(value.email); 
    if(value.email.indexOf("email.com")>=0) { 
     console.log('true'); 
     return true; 
    } else { 
     console.log('false'); 
     return false; 
    } 
    }; 
+0

非常感謝您的詳細解釋。 –

相關問題