Я делюсь тем, что обычно делаю, где есть необходимость поиска среди списка сетки.Я обычно беру один вход как search term
и ищу весь список с помощью $filter
в моем watcher
, и, если он совпадает с любым ключом конкретного объекта, немедленно обновите список сетки с новым отфильтрованным списком,
Я не рекомендую копировать, вставляя код, так как я использую много пользовательских директив и дизайн материала.Но вы можете понять основную идею, как вы можете это сделать.
<md-toolbar style="background-color:#F57C00 !important;" ng-show="showSearch">
<div class="md-toolbar-tools">
<md-input-container class="md-block" flex-gt-sm>
<md-icon style="color:white">search</md-icon>
<input type="text" ng-model="searchPhrase" style="color:white" name="searchPhrase">
</md-input-container>
<md-button ng-click="resetFilter()" class="md-icon-button">
<md-tooltip style="background-color:lightgray;color:black" md-direction="top">close</md-tooltip>
<md-icon>close</md-icon>
</md-button>
</div>
</md-toolbar>
в моем контроллере я пишу наблюдателю как:
$scope.$watch('searchPhrase', function (keyword) {
if (keyword!= null && keyword!= '' && keyword!= undefined)
$scope.gridList = ($filter('filter')($scope.actualGridList, keyword));
// incase keyword was empty, change the list back to original
else
$scope.gridList = angular.copy($scope.actualGridList);
});
//incase reset button was pressed, change the list back to original
$scope.resetFilter = function () {
$scope.showSearch = false;
$scope.searchPhrase = '';
$scope.gridList = angular.copy($scope.actualGridList);
}
Обратите внимание, что:
IЯ использую gridlist
в качестве списка ng-repeat
, а не actualGridList
, таким образом, исходный список останется неизменным, и gridList
будет отражен обратно к исходному списку через мой resetFilter()
Если вы хотите отфильтровать searchData.students
по многим ключевым словам, вы можете отфильтровать список по этим ключам, что-то вроде:
$scope.copStudents = $filter('filter')($scope.searchData.students, { 'name': keyword }, true);