W aplikacji kątowej pracuję nad Próbuję użyć filtrowania złożonego w połączeniu z paginacją. Pojawi się tabela z wpisami x
, każdy wiersz z trzema kolumnami. Mam dane nad każdą kolumną, w której użytkownik może filtrować kolumny na podstawie tekstu wejściowego. Filtry złożą się, aby zawęzić wyniki do najlepszych - ale w moim przypadku użycia może być zbyt wiele do wyświetlenia na jednej stronie, dlatego próbuję użyć stronicowania.Filtrowanie złożone z paginacją AngularJs
ciało tabela wygląda następująco:
<tbody>
<tr>
<td class="col-md-4">
<input type="text" ng-model="nameFilter" class="form-control" placeholder="Name">
</td>
<td class="col-md-4">
<input type="text" ng-model="ageFilter" class="form-control" placeholder="Age">
</td>
<td class="col-md-4">
<input type="text" ng-model="stateFilter" class="form-control" placeholder="State">
</td>
</tr>
<tr data-ng-repeat="person in people | filter:{'name': nameFilter} | filter:{'age':ageFilter} | filter:{'state':stateFilter} | limitTo: itemsPerPage">
<td class="col-md-4">{{person.name}}</td>
<td class="col-md-4">{{person.age}}</td>
<td class="col-md-4">{{person.state}}</td>
</tr>
</tbody>
Najtrudniejsze mam jest coraz paginacji pracować z zastosowanych filtrów. Widziałem przykład jak this one where the author uses a $watch w pojedynczym polu wyszukiwania i nadal mogę zarządzać stronami. Zauważyłem też, że istnieje $watchCollection
, którego można użyć, ale nie jestem pewien, jak go wdrożyć.
$scope.$watchCollection('[nameFilter, ageFilter, stateFilter]', function(newValues) {
//not sure what to do here.
console.debug(newValues);
$scope.filtered = '';; //really it should equal the now filtered by 3 filters group of people
$scope.noOfPages = Math.ceil($scope.filtered.length/$scope.itemsPerPage);
});
Czy zegarki są nawet najlepszym wyborem do zastosowania w tym przypadku? Mam to działające plunker jako przykład tego, nad którym pracuję, ale nadal potrzebuję wskazówek z paginacji. Jedno z pytań, które mam, to to, że nie wiem, w jaki sposób sprawić, aby paginacja miała zastosowanie konkretnie do listy danych. Widziałem inne przykłady i mam naśladowane, ale myślę, że filtrowanie może to zepsuć (nie jestem pewien)? Każda pomoc doceniona.
http://stackoverflow.com/a/17838375/5292301 – Pravin
[Kliment] (http://stackoverflow.com/users/2898463/kliment) odpowiedź jest prawidłowa, wystarczy wziąć pod uwagę, że filtrowanie z kanciastą może prowadzić do nieporozumień użytkownika, gdy sortujesz swoją lokalną kolekcję i być może spodziewasz się uzyskać dopasowanie ze wszystkich dostępnych kolekcji DB. – aUXcoder
@Pravin to prawda. Musisz napisać logikę dodatkową w kontrolerze dla stronicowania. Ale jeśli grasz trochę ze zmiennymi w kodzie, możesz to łatwo osiągnąć – Kliment