使用 ng-repeat 对列表进行分页

IT技术 javascript angularjs pagination
2021-01-23 11:00:55

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

我有一个可以处理这个的控制器:

function PhoneListCtrl($scope, Phone){
    $scope.phones = Phone.query();
    $scope.orderProp = 'age';
    $scope.limit = 5;
}

而且我还有一个module可以从 json 文件中检索数据。

angular.module('phonecatServices', ['ngResource']).
    factory('Phone', function($resource){
        return $resource('phones/:phoneId.json', {}, {
            query: {method: 'GET', params:{phoneId:'phones'}, isArray:true}
        });
    });
6个回答

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

这是一个简单的分页示例:http : //jsfiddle.net/2ZzZB/56/

该示例在 angular.js github wiki 上的小提琴列表中,应该会有所帮助:https : //github.com/angular/angular.js/wiki/JsFiddle-Examples

编辑:http : //jsfiddle.net/2ZzZB/16/http://jsfiddle.net/2ZzZB/56/(如果有 45 个结果,则不会显示“1/4.5”)

像 Bart 一样,我需要将分页信息传递到调用函数中以获取可分页数据 - 它相似但不同,在某些情况下可能会有所帮助。plnkr.co/edit/RcSso3verGtXwToilJ5a
2021-03-19 11:00:55
哦!没关系。if (input?)在返回之前添加了一个条件input.slice(start),谢谢安迪!
2021-03-25 11:00:55
我添加了括号并在维基上更新了它。但是没有它们它应该可以工作。
2021-03-31 11:00:55
非常感谢你!这正是我要找的。我之前看过那个例子,但没有用。现在我注意到有一点语法错误。“for”语句后缺少括号。
2021-04-03 11:00:55
嗨,这个演示对于我参与的项目来说非常方便。我需要添加选项以查看全部,或切换分页以及显示每个页面。所以我扩展了演示。多谢。jsfiddle.net/juanmendez/m4dn2xrv
2021-04-13 11:00:55

我刚刚制作了一个 JSFiddle,使用带有 Twitter Bootstrap代码的Build在每列上显示分页 + 搜索 + 排序 http : //jsfiddle.net/SAWsA/11/

好工作。最好更进一步,使列标题动态化,即从 items json 数组中获取所有唯一键值并将其绑定到 ng-repeat,而不是对值进行硬编码。就像我在这里所做的一样:jsfiddle.net/gavinfoley/t39ZP
2021-03-24 11:00:55
这是一个非常好的解决方案,易于适应。在两个绑定元素的数量达到数千的复杂场景中使用它,并且它确实不是重构整个代码的选项。您应该使用一些解释基本原理的代码更新答案。也许在小提琴中升级 AngularJS 和 Bootstrap 版本:)
2021-04-10 11:00:55
将所有这些代码放在控制器中只会使其可重用性降低 - telerik.com/help/silverlight/... 似乎缺少 angular:QueryableDomainServiceCollectionView、VirtualQueryableCollectionView、HierarchicalDataCollectionView
2021-04-13 11:00:55

我构建了一个module,使内存分页变得异常简单。

它允许您通过简单地替换ng-repeatwith进行分页dir-paginate,将每页的项目指定为管道过滤器,然后以单个指令的形式将控件放置在您喜欢的任何位置,<dir-pagination-controls>

以 Tomarto 提出的原始示例为例,它看起来像这样:

<ul class='phones'>
    <li class='thumbnail' dir-paginate='phone in phones | filter:searchBar | orderBy:orderProp | limitTo:limit | itemsPerPage: 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>

<dir-pagination-controls></dir-pagination-controls>

您的控制器中不需要任何特殊的分页代码。这一切都由module内部处理。

演示:http : //plnkr.co/edit/Wtkv71LIqUR4OhzhgpqL?p=preview

来源:GitHub 的 dirPagination

JFI:我们还可以在 <dir-pagination-controls> <ul class="pagination" ng-if="1 < pages.length || !auto​​Hide"> 中包含分页代码,而不是单独的 dirPagination.tpl.html。 .. </ul></dir-pagination-controls>
2021-03-31 11:00:55

我知道这个线程现在已经过时了,但我正在回答它以保持更新。

使用 Angular 1.4 及更高版本,您可以直接使用limitTo过滤器,它除了接受limit参数还接受begin参数。

用法: {{ limitTo_expression | limitTo : limit : begin}}

所以现在您可能不需要使用任何第三方库来实现诸如分页之类的功能。我创建了一个小提琴来说明这一点。

您链接到的小提琴实际上并未使用 begin 参数。
2021-04-05 11:00:55

查看此指令:https : //github.com/samu/angular-table

它可以自动排序和分页很多,并为您提供足够的自由来根据需要自定义表格/列表。

我如何在第一列中显示 Sno,因为我无法使用$index并且我的数组不包含增量值
2021-03-16 11:00:55
我这样做了:<td at-sortable at-attribute="index">{{sortedAndPaginatedList.indexOf(item) + 1}}</td>但我不知道这是否正确
2021-03-17 11:00:55
乍一看,这看起来正是我需要的,但我似乎无法使用 $resource 让它工作。看起来它总是认为我的列表在这里是空的:github.com/ssmm/angular-table/blob/master/coffee/ ... ... 一直无法弄清楚为什么。:/
2021-04-05 11:00:55