首先,有點背景。基本上,我使用ng-repeat呈現表格中的對象列表。我的篩選器需要能夠搜索字符串,並檢查重複對象中的每個搜索項。每個搜索條件都需要在過濾器的任何對象屬性中(以任何順序)出現以傳遞該對象。例如,如果一個對象是這樣的:Angular JS自定義過濾器
{
customer: 'John Smith',
detail: 'Some details'
}
我的搜索文本是smith john
或details john smith
或smith john details
,它需要能夠利用這些條款,以任意順序,並找到匹配的對象。上述對象應該匹配,因爲所有搜索條件都存在。
我寫的過濾低於:
angular.module('app').filter('assetsearch', function() {
return function (input, searchString) {
var searchTerms = searchString === '' ? [] : searchString.replace(/ +/g, ' ').replace(/[^\w\s]|_/g, '').toLowerCase().split(' ');
var matches = _.filter(input, function (asset) {
var textToSearch = [
asset.customer,
asset.details
];
textToSearch = textToSearch.join(' ').replace(/ +/g, ' ').replace(/[^\w\s]|_/g, "").toLowerCase();
var match = true;
_.each(searchTerms, function (term) {
match = (textToSearch.trim().indexOf(term) > -1) && match;
});
return match;
});
return matches;
}
});
我的模板代碼看起來很標準,其中$ctrl
指該模板的組件控制器:
<tr ng-repeat="asset in $ctrl.assets | assetsearch:$ctrl.filters.search" ng-if="!asset.loading">
成績
當我搜索'約翰史密斯','約翰'或'史密斯',它的作品 - 它只是拒絕工作,當我倒過來e字符串...當字符串反轉爲'Smith John'或更改爲'Joh Smith'時,過濾器似乎根本不會被觸發(在此情況下,過濾器函數開始處的控制檯日誌不會運行,所以它似乎沒有做任何事情)。