如何通过 AngularJS 进行分页?

Posted

技术标签:

【中文标题】如何通过 AngularJS 进行分页?【英文标题】:How can i make pagination through AngularJS? 【发布时间】:2015-03-10 23:21:39 【问题描述】:

最近我创建了一个 AngularJs App 。代码如下

html

      <div ng-app="" ng-controller="Hello">
            <ul>
                <li ng-repeat="x in greeting">
                     x.user_name 
                </li>
            </ul>
        </div>

而我的 JS 代码是:

function Hello($scope, $http) 
$http.get('http://localhost/google/cibl/dashboard/get_all_user').
    success(function(data) 
        $scope.greeting = data;
    );

它工作正常。这个 http 服务给了我 2000 行,现在我想用 AngularJs 来分页。我该怎么做?

【问题讨论】:

这里可能已经有一个答案:***.com/questions/10816073/… 【参考方案1】:

你可以这样做:

Pagination Example: http://jsfiddle.net/2ZzZB/56/

在这个问题中找到它:

Pagination on a list using ng-repeat

【讨论】:

【参考方案2】:

在你的控制器中

    app.controller('Hello', function($scope)
        $scope.pageSize = 10;
        $scope.currentPage = 0;

        $scope.changePage = function(page)
            $scope.currentPage = page;
        
    )

在你的标记中,你应该有

    <div ng-app="" ng-controller="Hello">
        <ul>
            <li ng-repeat="x in greeting | startFrom: currentPage * pageSize | limitTo: pageSize">
                 x.user_name 
            </li>
        </ul>
    </div>

我们缺少 startFrom 过滤器,所以让我们创建它

    app.filter('startFrom', function() 
        return function(input, start) 
            start = +start; //parse to int
            return input.slice(start);
        
    );

现在剩下的就是分页面板了,我会留给你用 css 来美化它

    <ul class="pagination" >
        <li ng-repeat="page in pagination" ng-class="'active':currentPage == page"><a ng-click="changePage(page)">page + 1</a></li>
    </ul>

注意事项:

    我们之所以使用 changePage() 而不是 currentPage = page 是因为 ng-repeat 可能会破坏一些变量

    在您的锚 () 标记中,您可以使用 href 来标记页面,而不是 ng-click,并在控制器中查看页面引用并根据查询进行更改。这样做的好处是,当您决定为您的网站进行 SEO 时,它就会为此做好准备!

    href="#!/partialname?page=page"

【讨论】:

其实我是 angularJS 的新手,我不明白如何放置这些代码。我的 JS 文件应该看起来像这样吗My JS File 我为您编写的应用程序控制器中的所有内容都可以进入您的 Hello 函数。这些是声明控制器的同义词。 @YangLi 我们可以将 dir-pagination 指令用于任何标记,如 div 或任何其他自定义指令吗?【参考方案3】:

至少我得到了一个解决方案并且它可以正常工作:

HTML:

<div ng-controller="userController" class="jumbotron">
        <h2>User List</h2> 

        <table  class="table table-striped">
            <thead>
                <tr>
                    <th>User </th>
                    <th>Group</th>
                    <th>Action</th>
                </tr>
            </thead>
            <tbody>
                <tr dir-paginate="u in users | itemsPerPage : 5">
                    <td>u.user_name</td>
                    <td>u.user_type</td>

                </tr>                         
            </tbody>
        </table>                
        <dir-pagination-controls on-page-change="pageChanged(current)" template-url="<?php echo base_url(); ?>js/dirPagination.tpl.html"></dir-pagination-controls>
    </div>

和 JS : 这里我使用 AngularJs 分页指令

function userController($scope, $http) 
    $scope.users = [];
    $scope.total = 0;
    $scope.perPage = 25; // this should match however many results your API puts on one page
    getUsers(1);

    $scope.pagination = 
        current: 1
    ;

    $scope.pageChanged = function (newPage) 
        getUsers(newPage);
    ;

    function getUsers(pageNumber) 
            // this is just an example, in reality this stuff should be in a service
            $http.get(app.baseUrl + 'dashboard/get_all_user/' + pageNumber)
                    .success(function (data) 
                        console.log(data);
                        $scope.users = data.users;
                        $scope.total = data.total;
            )
            .error(function (data) 
                console.log(data);
                alert("There was a problem. Please try again later.");
            );
        
;
var myApp = angular.module('myApp', ['angularUtils.directives.dirPagination']);
var app = app || ;
app.baseUrl = '<?= base_url() ?>';
myApp.controller('userController', userController);

【讨论】:

以上是关于如何通过 AngularJS 进行分页?的主要内容,如果未能解决你的问题,请参考以下文章

使用 angularjs 进行 django-rest 分页

AngularJS + OAuth

AngularJS API

通过自定义指令进行 ng-grid 分页

如何在 AngularJS 中收听 jQuery 事件

使用分页 AngularJs 进行复合过滤