我有一个案例,我必须从服务器中提取数据并在结果中进行分页。有数以千计的数据,我计划每页显示20个项目。
我的计划是每次点击新页面时调用此Laravel功能:
public static function GetPagingListing($limLow=null, $limTop=null) {
$data = array();
$results = DB::table('news')->orderBy('date','desc')->limit($limLow, $limTop)->get(array('id','title','category','edituser','date'));
if($results != null) {
$i = 0;
foreach($results as $k=>$v) {
$data[$i][] = $v;
$i++;
}
}
$count = DB::table('news')->count(); //this gives total count of the data, for pagination later
return Response::json(['data'=>$data, 'count'=> ($count/20)]);
}
然后我当前显示分页的方式是这个(Angular中的.html):
<ul>
<li ng-class="{disabled: currentPage == 0}">
<a href ng-click="prevPage()"><i class="fa fa-angle-double-left"></i> Before</a>
</li>
<li ng-repeat="n in range(itemCount)" ng-class="{active: n == currentPage}" ng-click="setPage()">
<a href ng-bind="n + 1">1</a>
</li>
<li ng-class="{disabled: currentPage == newsList.length - 1}">
<a href ng-click="nextPage()">After <i class="fa fa-angle-double-right"></i></a>
</li>
</ul>
这一切都运行正常,但我的数据总数是1000+,这就像用户可以点击的50+分页。如何使分页像[<prev][1][2][3][...][21][22][23][...][50][51][52][next>]
(或至少是一个逻辑)?
修改
使用Angular UI Bootstrap解决了我的问题:
<pagination total-items="itemCount" page="currentPage" on-select-page="setPage(page)" boundary-links="true" rotate="false" max-size="5"></pagination>
使用其cdn:
<script src="//cdn.jsdelivr.net/angular.bootstrap/0.7.0/ui-bootstrap-tpls.min.js"></script>
答案 0 :(得分:1)
我最近刚想到这一点,我的结论是,分页的逻辑令人惊讶地参与其中。您可以寻找灵感的地方是Wordpress的paginate_links
函数http://core.trac.wordpress.org/browser/tags/3.7.1/src/wp-includes/general-template.php#L1988。
您需要知道总页数total
,当前页面current
,要显示的第一页/最后一页的数量end_size
(示例中为3)和数字当前页面mid_size
周围的页面(在您的示例中为1);然后: