1
看起來像自定義過濾器是我在這裏追求的。在篩選出元素時,我正在尋找特定的行爲。我正在尋找一個統一的搜索欄來返回所有匹配的組名,並且所有學生沒有進行組名匹配,組名匹配的學生。通過使用自定義過濾器嵌套ng重複進行過濾
Here's my plunker with all the code
例如,通過搜索「ER」的結果應該是「招潮蟹」和「火熱的船長」,而是「金熊」的整個上市應該只顯示德魯·帕克和埃裏克。
plunkr當前演示默認的過濾器行爲。如果將HTML中的過濾器更改爲我的自定義過濾器,即第27行的nestFilter
,並且遵循控制檯日誌,則可以看到返回的數組正在更新,但添加和刪除了搜索項,但元素未被重繪。這裏是我的過濾器
bootTracker.filter('nestFilter', function() {
return function(elements, input) {
var filteredCohorts, filteredCohortsStudents;
filteredCohorts = [];
filteredCohortsStudents = [];
console.log(elements);
angular.forEach(elements, function(cohort) {
var matchedStudents;
matchedStudents = [];
if (cohort.name.match(new RegExp(input, 'ig'))) {
filteredCohorts.push(cohort);
}
angular.forEach(cohort.students, function(student) {
if (student.name.match(new RegExp(input, 'ig'))) {
return matchedStudents.push(student);
}
});
cohort.students = matchedStudents;
if (cohort.students.length > 0) {
return filteredCohortsStudents.push(cohort);
}
});
console.log(filteredCohorts);
return filteredCohorts;
};
});
順便說一句,因爲你的正則表達式是循環不變,你應該建立一個實例外循環,然後再用。此外,由於用戶提供的輸入可能包含要直接匹配的RegEx字符(例如「。*」),因此您需要轉義輸入(http://stackoverflow.com/questions/3561493/is-there-a -regexp逃生功能,在JavaScript的)。 –
延伸!這是關鍵。謝謝 –