javascript - 使用 ng-repeat 在列表上分页

标签 javascript angularjs pagination

我正在尝试将页面添加到我的列表中。我遵循了 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>

我添加了一个带有一些值的选择标签,以限制将要显示的项目数量。我现在想要的是添加分页以显示接下来的 5、10 等。

我有一个与之配合使用的 Controller :

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}
        });
    });

最佳答案

如果你没有太多数据,你绝对可以通过将所有数据存储在浏览器中并过滤特定时间可见的内容来进行分页。

这是一个 simple pagination example来自 angular.js 上的 fiddle 列表 Github wiki ,这应该有帮助:

var app=angular.module('myApp', []);

function MyCtrl($scope) {
    $scope.currentPage = 0;
    $scope.pageSize = 10;
    $scope.data = [];
    $scope.numberOfPages=function(){
        return Math.ceil($scope.data.length/$scope.pageSize);                
    }
    for (var i=0; i<45; i++) {
        $scope.data.push("Item "+i);
    }
}

//We already have a limitTo filter built-in to angular,
//let's make a startFrom filter
app.filter('startFrom', function() {
    return function(input, start) {
        start = +start; //parse to int
        return input.slice(start);
    }
});
<div ng-controller="MyCtrl">
    <ul>
        <li ng-repeat="item in data | startFrom:currentPage*pageSize | limitTo:pageSize">
            {{item}}
        </li>
    </ul>
    <button ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1">
        Previous
    </button>
    {{currentPage+1}}/{{numberOfPages()}}
    <button ng-disabled="currentPage >= data.length/pageSize - 1" ng-click="currentPage=currentPage+1">
        Next
    </button>
</div>

关于javascript - 使用 ng-repeat 在列表上分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11581209/

相关文章:

angularjs - Angular : ng-options, 在更新时同时替换数组和模型值

javascript - 根据 URL 参数过滤 'ng-repeat'

javascript - Angular : Communication between directives - ng-repeat not refresh

ruby-on-rails - Ruby on Rails : Default will_paginate to last page of results

javascript - 如何准确地将SVG标签响应式排列到video标签的真实播放区域上方?

javascript - 是否可以缓存/存档整个 Web 文档(包括 DOM 的精确状态)并稍后重新加载?

javascript - 在 IIS 8 (Windows 8) 上部署 ASP.Net MVC 应用程序时未呈现 CSS 和 JS 文件

javascript - 如何在jquery中将变量中的值从一个页面发送到另一个页面?

php - 使用 redbeanphp 进行分页的最佳方式?

loops - 如何使用 Liquid (Shopify) 遍历商店的所有产品?