2014-01-09 93 views
2

我在表上有一個適配器。表中的數據只是我需要的所有數據的一個子集。我想過濾一下包含在我的表列中的信息,而不是所有的數據。Angularjs過濾器匹配對象中的所有屬性,即使在我的表中只有一個屬性

的數據是具有事件用戶歷史對象。用戶是進行更改的人員。所以在example Jordy對自己做出了改變,但是現在我無法過濾他改名的名字,因爲這是他的當前名字,所以過濾器匹配事件用戶的名字。默認過濾器適用於未包含在用戶中的數據。所以我的問題是,一個默認的過濾器是否可以排除/內含物,或者如果我卡住寫一個新的過濾器。

我所看到的,你可以在用戶對象本身的對象屬性具體過濾器,但我無法弄清楚如何做到這一點,對事件數據仍然篩選。

JS:

var myApp = angular.module('myApp', []); 

function MyCtrl($scope) { 
$scope.searchText = "Jordy" 

$scope.events = [{ 
    "id": 8, 
     "version": 0, 
     "eventUser": { 
      "email": "[email protected]", 
      "nameFirst": "Jordy", 
      "nameLast": "Nelson" 
    }, 
     "eventField": "nameLast", 
     "valueOld": "Nelsons", 
     "valueNew": "Nelson", 
     "eventDate": "Jan 7, 2014 04:05 PM" 
}, { 
    "id": 7, 
     "version": 0, 
     "eventUser": { 
     "email": "[email protected]", 
      "nameFirst": "Jordy", 
      "nameLast": "Nelson" 
    }, 
     "eventField": "nameFirst", 
     "valueOld": "Jordys", 
     "valueNew": "Jordy", 
     "eventDate": "Jan 7, 2014 04:05 PM" 
}, { 
    "id": 6, 
     "version": 0, 
     "eventUser": { 
     "email": "[email protected]", 
      "nameFirst": "Jordy", 
      "nameLast": "Nelson" 
    }, 
     "eventField": "timeZoneId", 
     "valueOld": "Pacific/Tahiti", 
     "valueNew": "Pacific/Niue", 
     "eventDate": "Jan 7, 2014 01:43 PM" 
}, { 
    "id": 5, 
     "version": 0, 
     "eventUser": { 
     "email": "[email protected]", 
      "nameFirst": "Jordy", 
      "nameLast": "Nelson" 
    }, 
     "eventField": "timeZoneId", 
     "valueOld": "America/Boise", 
     "valueNew": "Pacific/Tahiti", 
     "eventDate": "Jan 7, 2014 10:26 AM" 
}, { 
    "id": 4, 
     "version": 0, 
     "eventUser": { 
     "email": "[email protected]", 
      "nameFirst": "Jordy", 
      "nameLast": "Nelson" 
    }, 
     "eventField": "title", 
     "valueOld": "", 
     "valueNew": "s", 
     "eventDate": "Jan 7, 2014 10:25 AM" 
}, { 
    "id": 3, 
     "version": 0, 
     "eventUser": { 
     "email": "[email protected]", 
      "nameFirst": "Jordy", 
      "nameLast": "Nelson" 
    }, 
     "eventField": "nameLast", 
     "valueOld": "Nelson", 
     "valueNew": "Nelsons", 
     "eventDate": "Jan 7, 2014 10:25 AM" 
}, { 
    "id": 2, 
     "version": 0, 
     "eventUser": { 
     "email": "[email protected]", 
      "nameFirst": "Jordy", 
      "nameLast": "Nelson" 
    }, 
     "eventField": "nameFirst", 
     "valueOld": "Jordy", 
     "valueNew": "Jordys", 
     "eventDate": "Jan 7, 2014 10:25 AM" 
}, { 
    "id": 1, 
     "version": 0, 
     "eventUser": { 
     "email": "[email protected]", 
      "nameFirst": "Jordy", 
      "nameLast": "Nelson" 
    }, 
     "eventField": "password", 
     "valueOld": "Old Password", 
     "valueNew": "New Password", 
     "eventDate": "Jan 6, 2014 05:03 PM" 
}] 
} 

HTML:

<div ng-controller="MyCtrl"> 
<input type="text" ng-model="searchText"> 
<table> 
    <tr ng-repeat="event in events|filter:searchText"> 
     <td>{{event.id}}</td> 
     <td>{{event.valueOld}}</td> 
     <td>{{event.valueNew}}</td> 
     <td>{{event.eventUser.email}}</td> 
    </tr> 
</table> 
</div> 

小提琴: http://jsfiddle.net/VfJXU/

回答

2

請試試這個:

<tr ng-repeat="event in events|filter:{thePropertyYouWant:searchText}"> 

更換thePropertyYouWant與您要搜索的屬性名稱。

+0

如果過濾器僅適用於屬性特定的列,但所有其他列都停止工作,則可以使用此功能。 – Fortytwo

0

您可以通過搜索文本字段綁定到具有相同屬性名作爲對象,你試圖過濾對象的屬性篩選對象的特定屬性(或屬性)。這允許您在過濾器中使用多個字段/屬性。

例如:

更換你撥弄

<input type="text" ng-model="searchText"> 
<table> 

隨着

<table> 
    <tr> 
    <td><input type="text" ng-model="searchText.id"></td> 
    <td><input type="text" ng-model="searchText.valueOld"></td> 
    <td><input type="text" ng-model="searchText.valueNew"></td> 
    </tr> 

簡化例子http://jsfiddle.net/dspies/e3Kz4/2/

**編輯:您還需要刪除或更改以下到物體

$scope.searchText = "Jordy" 
+0

是的,我試圖保留所有列的單一輸入。儘管如此,我們最終可能會改變設計。感謝您的迴應。同樣設置searchText的默認值只是讓使用小提琴的人可以看到什麼名字應該去那裏。 – Fortytwo

相關問題