Я пытаюсь добавить страницы в свой список. Я следовал руководству по AngularJS, посвященному смартфонам, и пытаюсь отобразить только определенное количество объектов. Вот мой 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>
Я добавил тег select с некоторыми значениями, чтобы ограничить количество отображаемых элементов. Сейчас я хочу добавить разбиение на страницы для отображения следующих 5, 10 и т. Д.
У меня есть контроллер, который работает с этим:
function PhoneListCtrl($scope, Phone){
$scope.phones = Phone.query();
$scope.orderProp = 'age';
$scope.limit = 5;
}
А также у меня есть модуль для извлечения данных из файлов 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
источник
источник
Ответы:
Если у вас не слишком много данных, вы определенно можете выполнить разбиение на страницы, просто сохранив все данные в браузере и отфильтровав то, что видно в определенное время.
Вот простой пример разбивки на страницы: http://jsfiddle.net/2ZzZB/56/
Этот пример был в списке скрипок на github wiki angular.js, что должно быть полезно: https://github.com/angular/angular.js/wiki/JsFiddle-Examples
РЕДАКТИРОВАТЬ: http://jsfiddle.net/2ZzZB/16/ до http://jsfiddle.net/2ZzZB/56/ (не будет отображаться «1 / 4.5», если будет 45 результатов)
источник
if (input?)
условие перед возвратомinput.slice(start)
, спасибо Энди!Я только что сделал JSFiddle, который показывает разбивку на страницы + поиск + порядок по каждому столбцу, используя Build with Twitter Bootstrap code: http://jsfiddle.net/SAWsA/11/
источник
Я создал модуль, который невероятно упрощает разбиение на страницы в памяти.
Он позволяет выполнять разбиение на страницы, просто заменяя их
ng-repeat
наdir-paginate
, указывая элементы на странице в виде конвейерного фильтра, а затем отбрасывая элементы управления в любом месте в виде одной директивы,<dir-pagination-controls>
Если взять исходный пример, заданный Томарто, он будет выглядеть так:
В вашем контроллере нет необходимости в специальном коде разбивки на страницы. Все это обрабатывается внутри модуля.
Демо: http://plnkr.co/edit/Wtkv71LIqUR4OhzhgpqL?p=preview
Источник: dirPagination на GitHub
источник
Я знаю, что эта ветка сейчас устарела, но я отвечаю на нее, чтобы держать вещи немного в курсе.
В Angular 1.4 и выше вы можете напрямую использовать фильтр limitTo, который помимо принятия
limit
параметра также принимаетbegin
параметр.Использование:
{{ limitTo_expression | limitTo : limit : begin}}
Так что теперь вам может не понадобиться использовать какую-либо стороннюю библиотеку для достижения чего-то вроде разбивки на страницы. Я создал скрипку, чтобы проиллюстрировать то же самое.
источник
Ознакомьтесь с этой директивой: https://github.com/samu/angular-table
Он во многом автоматизирует сортировку и разбиение на страницы и дает вам достаточно свободы для настройки таблицы / списка, как вы хотите.
источник
$index
и мой массив не содержит дополнительных значений<td at-sortable at-attribute="index">{{sortedAndPaginatedList.indexOf(item) + 1}}</td>
но я не знаю, правильный ли это путьВот демонстрационный код, где есть пагинация + фильтрация с помощью AngularJS:
https://codepen.io/lamjaguar/pen/yOrVym
JS:
HTML:
источник