2017-02-14 70 views
2

好吧,看起來很簡單,但不是。Angular ng-repeat filter:¿如何指定過濾字段?

我想執行一個簡單的角度過濾器,但我需要指定我的數組在過濾器中使用哪些字段。

一個基本的過濾器是:

<li ng-repeat="person in app.people | filter: app.search"> 

單場過濾器:

<li ng-repeat="person in app.people | filter: {Surname: app.search}"> 

我如何可以指定多個字段用於過濾器? 喜歡的東西:

<li ng-repeat="person in app.people | filter: {Name,Surname: app.search}"> 

這裏使用基本過濾器和單場過濾器Plunker:https://jsfiddle.net/odLz1v71/3/

回答

2

在這種情況下,我建議你在你的控制器中添加過濾功能是這樣的:

vm.searchFilter = function(item){ 
    // Add your own search logic here 
    return item.Name.includes(vm.search) || item.Surname.includes(vm.search); 
} 

,然後用它是這樣的:

<li ng-repeat="person in app.people | filter: app.searchFilter"> 
+0

好吧,我不能相信Angular本身沒有這種行爲......我打算使用這個過濾器函數,但是我將添加「toLowerCase()」到這兩個屬性並搜索值。很多。 –

+0

Angular團隊無法預測,也不能包括每個用於過濾的用例 - 這會引入大量的膨脹並且混淆了已經陡峭的學習曲線的框架的新用戶。 –

+0

添加'toLowerCase()'是個好主意。這就是我在「//在這裏添加自己的搜索邏輯」的意思 - 評論。 :-) –

0

我做不要以爲你可以用基本的過濾器直接做到這一點,但你可以提供一個函數爲filter過濾器使用,將做此項檢查對您:

vm.checkName = function (value) { 
    return value.Name.indexOf(vm.search) > -1 || value.Surname.indexOf(vm.search) > -1; 
    }; 

參見:https://jsfiddle.net/odLz1v71/4/