Я столкнулся с этой же проблемой, но ответы здесь не соответствовали моим потребностям (или, может быть, желаниям). Я решил решить эту проблему самостоятельно и остановился на создании фильтра, единственной целью которого является запись элементов, проходящих через него, в заданном свойстве на заданной цели. Я придумал это:
/**
* Author: Eric Ferreira <http://stackoverflow.com/users/2954747/eric-ferreira> ©2015
*
* This filter will sit in the filter sequence, and its sole purpose is to record
* the current contents to the given property on the target object. It is sort of
* like the 'tee' command in *nix cli.
*/
angular.module('app').filter('record', function() {
return function(array, property, target) {
if (target && property) {
target[property] = array;
}
return array;
}
});
Затем вы используете фильтр в своей разбивке на страницы (или в любом другом месте, где вы хотите получить текущий массив на самом деле [подумайте, после фильтрации с помощью поискового запроса, после разбиения на страницы, после фильтрации текущей страницы и т. д.]) следующим образом:
<div dir-paginate="item in items | itemsPerPage:pageSize | record:'currentPage':this">{{item.text}}</div>
Вы также можете использовать его несколько раз в одной последовательности:
<div dir-paginate="item in items | filter:searchQuery | record:'filtered':this | itemsPerPage:pageSize | record:'currentPage':this">{{item.text}}</div>
В приведенном выше примере будет записана как текущая страница, так и все записи, полученные в результате текущего запроса фильтра.
Это запишет (и обновит при каждом изменении) текущую страницу в $scope.currentPage
. this
в приведенном выше примере является целью фильтра. Он разрешается в $scope.this
, что для большинства намерений и целей равно просто $scope
.
В вашем конкретном случае вы должны использовать эту строку (после добавления/требования фильтра в вашем модуле) вместо разбиения на страницы:
<li dir-paginate="meal in perman = ( meals | filter:q ) | orderBy: order?'key':'-key' | itemsPerPage: pageSize | record:'currentPage':this">{{ meal.key + ': ' +meal.val }}</li>
Я пошел дальше и разветвил ваш плункер, чтобы показать, что он тоже работает:
http://plnkr.co/edit/uC3RiC?p=preview
person
Eric F.
schedule
25.09.2015