Estou tentando adicionar páginas à minha lista. Segui o tutorial do AngularJS, sobre smartphones e estou tentando exibir apenas um certo número de objetos. Aqui está o meu arquivo html:
<div class='container-fluid'>
<div class='row-fluid'>
<div class='span2'>
Search: <input ng-model='searchBar'>
Sort by:
<select ng-model='orderProp'>
<option value='name'>Alphabetical</option>
<option value='age'>Newest</option>
</select>
You selected the phones to be ordered by: {{orderProp}}
</div>
<div class='span10'>
<select ng-model='limit'>
<option value='5'>Show 5 per page</option>
<option value='10'>Show 10 per page</option>
<option value='15'>Show 15 per page</option>
<option value='20'>Show 20 per page</option>
</select>
<ul class='phones'>
<li class='thumbnail' ng-repeat='phone in phones | filter:searchBar | orderBy:orderProp | limitTo:limit'>
<a href='#/phones/{{phone.id}}' class='thumb'><img ng-src='{{phone.imageUrl}}'></a>
<a href='#/phones/{{phone.id}}'>{{phone.name}}</a>
<p>{{phone.snippet}}</p>
</li>
</ul>
</div>
</div>
</div>
Adicionei uma tag de seleção com alguns valores para limitar o número de itens que serão exibidos. O que eu quero agora é adicionar a paginação para exibir os próximos 5, 10, etc.
Eu tenho um controlador que funciona com isso:
function PhoneListCtrl($scope, Phone){
$scope.phones = Phone.query();
$scope.orderProp = 'age';
$scope.limit = 5;
}
E também tenho um módulo para recuperar os dados dos arquivos json.
angular.module('phonecatServices', ['ngResource']).
factory('Phone', function($resource){
return $resource('phones/:phoneId.json', {}, {
query: {method: 'GET', params:{phoneId:'phones'}, isArray:true}
});
});
javascript
angularjs
paginate
Tomarto
fonte
fonte
Respostas:
Se você não tiver muitos dados, você pode definitivamente fazer a paginação apenas armazenando todos os dados no navegador e filtrando o que é visível em um determinado momento.
Aqui está um exemplo simples de paginação: http://jsfiddle.net/2ZzZB/56/
Esse exemplo estava na lista de violações no wiki do angular.js no github, o que deve ser útil: https://github.com/angular/angular.js/wiki/JsFiddle-Examples
EDIT: http://jsfiddle.net/2ZzZB/16/ para http://jsfiddle.net/2ZzZB/56/ (não mostrará "1 / 4.5" se houver 45 resultados)
fonte
if (input?)
condição antes de retornarinput.slice(start)
, obrigado Andy!Acabei de criar um JSFiddle que mostra a paginação + pesquisa + ordem em cada coluna usando o código de inicialização do Build with Twitter : http://jsfiddle.net/SAWsA/11/
fonte
Criei um módulo que torna a paginação na memória incrivelmente simples.
Ele permite que você pagine simplesmente substituindo
ng-repeat
pordir-paginate
, especificando os itens por página como um filtro canalizado e soltando os controles onde quiser, na forma de uma única diretiva,<dir-pagination-controls>
Para pegar o exemplo original solicitado por Tomarto, seria assim:
Não há necessidade de qualquer código de paginação especial no seu controlador. Tudo é tratado internamente pelo módulo.
Demo: http://plnkr.co/edit/Wtkv71LIqUR4OhzhgpqL?p=preview
Fonte: dirPagination do GitHub
fonte
Eu sei que esta discussão é antiga agora, mas estou respondendo para manter as coisas um pouco atualizadas.
Com o Angular 1.4 e superior, você pode usar diretamente o filtro limitTo, que além de aceitar o
limit
parâmetro também aceita umbegin
parâmetro.Uso:
{{ limitTo_expression | limitTo : limit : begin}}
Portanto, agora você pode não precisar usar nenhuma biblioteca de terceiros para obter algo como paginação. Eu criei um violino para ilustrar o mesmo.
fonte
Confira esta diretiva: https://github.com/samu/angular-table
Ele automatiza muito a classificação e a paginação e oferece liberdade suficiente para personalizar sua tabela / lista da maneira que você desejar.
fonte
$index
e minha matriz não contém valores incrementais<td at-sortable at-attribute="index">{{sortedAndPaginatedList.indexOf(item) + 1}}</td>
mas eu não sei se é o caminho certoAqui está um código de demonstração em que há paginação + Filtragem com AngularJS:
https://codepen.io/lamjaguar/pen/yOrVym
JS:
HTML:
fonte