2014-01-20 128 views
1

我有一個列表項(名稱:字符串,年齡:國際,檢查:布爾)。 該列表以ng-repeat顯示。 我想讓用戶使用搜索字段搜索列表,搜索不得影響檢查值。angularjs - ng重複或OR篩選器

  • 搜索只能觸發,如果用戶進入的searchfield
  • 如果seachfield充滿東西,搜索過濾器應該像往常一樣,選中的項不能被過濾掉。

我試着創建一個自定義過濾器。我在使用OR邏輯理解$ filter('filter')函數時遇到問題。

任何人都可以幫我解開我腦中的結嗎?

app.filter('mySearchFilter', function($filter) { 
    return function(data, searchText) { 

     if(!searchText || searchText.length === 0) { 
      return data; 
     } 

     console.log(searchText); 

     return $filter('filter')(data, searchText); 
     //how can I provide additional, OR-concatinated, filter-criteria? 
    } 
}); 

檢查出我爲最小,例如代碼普拉克。

http://plnkr.co/edit/3xHLOrSPD3XZy2K9U2Og?p=preview

回答

1

據我瞭解你,你正在尋找一個工會的功能。下劃線提供這樣的功能。有了這個,你可以寫你的過濾器以這樣的方式

app.filter('mySearchFilter', function($filter) { 
    return function(data, searchText) { 

     if(!searchText || searchText.length === 0) { 
      return data; 
     } 

     var allChecked = data.filter(function(d){return d.checked}); 
     var allMatched = $filter('filter')(data, searchText); 
     return _.union(allMatched, allChecked); 
    } 
}); 

看看:http://documentcloud.github.io/underscore/#union,不要忘了包括腳本:

<script src="http://documentcloud.github.io/underscore/underscore.js"></script> 

PLUNKR

+0

謝謝,邁克爾,爲你的解決方案。我是AngularJS的新手,並且一直在用JavaScript掙扎。我通常在scala工作,習慣了它的舒適性,類型安全等等。下劃線帶走了一些痛苦;-) – FloWi