AngularJS分页实现
基本思路
一开始页码为1,Service向服务器端获取对应信息;点击上/下一页/跳转,通过对应的页码向服务器端获取对应的信息。
由于后台暂时没弄好,我实现的过程中直接读取准备好的JSON文件,通过页码获取对应的信息段并通过ng-repeat在页面显示具体信息。
展示
一开始直接在Controller中实现分页的功能代码
CSS部分
- /**
- * Pagination
- */
- .pagination{
- margin: 40px auto 20px auto;
- }
- .pagination ul{
- width: 500px;
- }
- .pagination-btn-group{
- float: left;
- margin-left: 40px;
- }
- .pagination-btn-group:after{
- display: table;
- content: " ";
- clear: both;
- }
- .pagination ul li:hover,.pagination-btn-group div:hover{
- cursor: pointer;
- background-color: #B6B6B6;
- color: #EBEBEB;
- }
- .pagination-btn,.pagination-input,.pagination-next,.pagination-jmp,.pagination-prev{
- display: block;
- float: left;
- height: 36px;
- text-align: center;
- margin-right: 8px;
- border-radius: 5px;
- margin-bottom: 40px;
- }
- .pagination-btn,.pagination-jmp{
- background-color: #EBEBEB;
- color: #B6B6B6;
- line-height: 36px;
- width: 60px;
- }
- .pagination-input{
- border-style: solid;
- border-color: #B6B6B6;
- border-width: 1px;
- width: 60px;
- }
- .pagination-next,.pagination-prev{
- width: 80px;
- background-color: #EBEBEB;
- color: #B6B6B6;
- line-height: 36px;
- }
- .active{
- background-color: #B6B6B6;
- color: #EBEBEB;
- }
- .disabled{
- display: none;
- }
- /*end of pagination*/
HTML部分
- <div class="pagination">
- <ul>
- <li class="pagination-btn" ng-class="{true:'active'}[currentPage == page]" ng-repeat="page in pages" ng-click="selectPage(page)">
- {{page}}
- </li>
- <input class="pagination-input" ng-model="destPage">
- <li class="pagination-jmp" ng-click="skipPage()">跳转</li>
- </ul>
- <div class="pagination-btn-group">
- <div class="pagination-prev" ng-click="prevPage()" ng-class="{true:'disabled'}[currentPage == 1]"><上一页</div>
- <div class="pagination-next" ng-click="nextPage()" ng-class="{true:'disabled'}[currentPage == endPage]">下一页></div>
- </div>
- </div>
ng-class="{true:'active'}[currentPage == page]" 表示当page为当前页面时应用.active的CSS样式
在angular中为我们提供了3种方案处理class:
1.scope变量绑定
如:<div class=”{{test}}”></div> 然后在Controller中设置$scope.test值,不推荐使用,Controller中应该放业务逻辑部分,Service与服务器交互,Directive与页面交互
2.字符串数组形式
形如:<div ng-class="{true: 'active', false: 'inactive'}[expression]"> expression为true,则active;否则inactive
3.对象key/value处理
形如:<div ng-class {'selected': isSelected, 'car': isCar}"> isSelected为true,增加.selected样式;isCar为true,增加car样式
功能部分
- $scope.loadPagination = function() {
- $scope.pages = [];
- var i,j;
- if($scope.currentPage == "1..."){
- $scope.currentPage = 1;
- }else if($scope.currentPage == "..." + $scope.endPage){
- $scope.currentPage = $scope.endPage;
- }
- if(($scope.endPage <= 5) || ($scope.currentPage <= 3)){
- $scope.pages[0] = 1;
- for(i = 1;i < 5;i++){
- if(i == $scope.endPage)
- break;
- $scope.pages[i] = i + 1;
- }
- if(i < $scope.endPage){
- $scope.pages[4] = "..." + $scope.endPage;
- }
- }else if($scope.currentPage <= $scope.endPage-3){
- $scope.pages[0] = "1...";
- $scope.pages[1] = $scope.currentPage - 1;
- $scope.pages[2] = $scope.currentPage;
- $scope.pages[3] = $scope.currentPage + 1;
- $scope.pages[4] = "..." + $scope.endPage;
- }else{
- $scope.pages[0] = "1...";
- $scope.pages[1] = $scope.endPage - 3;
- $scope.pages[2] = $scope.endPage - 2;
- $scope.pages[3] = $scope.endPage - 1;
- $scope.pages[4] = $scope.endPage;
- }
- var start=($scope.currentPage - 1) * $scope.pageSize;
- var end=$scope.currentPage * $scope.pageSize;
- $scope.dialogList = $scope.realDialogList.slice(start,end);
- };
- $scope.prevPage = function() {
- $scope.currentPage -= 1;
- $scope.loadPagination();
- };
- $scope.nextPage = function() {
- $scope.currentPage += 1;
- $scope.loadPagination();
- };
- $scope.skipPage = function() {
- var destPage=Number($scope.destPage);
- $scope.destPage = "";
- if(isNaN(destPage) || destPage <= 0 || destPage > $scope.endPage){
- return ;
- }
- $scope.currentPage = destPage;
- $scope.loadPagination();
- };
- $scope.selectPage = function(selected) {
- $scope.currentPage=selected;
- $scope.loadPagination();
- };
$scope.realDialogList为Service获取的JSON信息,$scope.dialogList为要展示在页面上的信息
这里关键就是loadPagination(),我的思路是设置5个按钮的分页,第一个按钮作为首页链接,最后一个按钮作为末页链接,剩下三个按钮,将当前页码设置为中间按钮 。
根据分页栏首/末页按钮数字分为三种状态:
1. 首页为'1',此时 页码<=3 或 末页<=5,当末页>5时,设置为'...X'
2. 首页为'1...',末页为'...X',此时 页码<=末页-3
3. 首页位'1...',末页为‘X',其他情况
代码:http://pan.baidu.com/s/1hqEZi0s
推荐将分页写成Directive
AngularJS分页实现的更多相关文章
- 自定义angularjs分页控件
继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...
- AngularJS 分页
前端源码: <div> <h1>列表页33</h1> <table> <thead> <tr><td>CandiID ...
- angularjs 分页精华代码
//pageinfo $scope.pageSize=10;$scope.currentType={{ current_type }};$scope.currentPage={{ json_encod ...
- Angularjs 分页控件
实现效果: 实现步骤: 1.分页页面:page.html,页面多余样式,需要自己去除. <div class="row" ng-show="conf.totalIt ...
- angularjs分页组件
这是我第一次写博客,激动,首先,我也是个菜鸟,分享一下自己写的服务器端分页的代码,自己一步一步写的,其中也有参考别人的代码.技术比较渣,先这样了. // ====== 2019-1-3 ======/ ...
- 前端使用AngularJS的$resource,后端ASP.NET Web API,实现分页、过滤
在上一篇中实现了增删改查,本篇实现分页和过滤. 本系列包括: 1.前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查2.前端使用AngularJS的$re ...
- Angularjs 跳转页面并传递参数的方法总结
http://www.zhihu.com/question/33565135 http://www.codeproject.com/Articles/1073780/ASP-NET-MVC-CRUD- ...
- angular.js分页代码的实例
对于大多数web应用来说显示项目列表是一种很常见的任务.通常情况下,我们的数据会比较多,无法很好地显示在单个页面中.在这种情况下,我们需要把数据以页的方式来展示,同时带有转到上一页和下一页的功能.现在 ...
- 有了jsRender,妈妈再也不用担心我用jq拼接DOM拼接的一团糟了、页面整齐了、其他伙伴读代码也不那么费劲了
写在前面 说来也很巧, 下午再做一个页面,再普通不过的分页列表,我还是像往常一样,基于MVC环境下,我正常用PagedList.MVC AJAX做无刷新分页,这时候问题就来了,列表数据中有个轮播图用到 ...
随机推荐
- explicit构造函数的作用
explicit构造函数是用来防止隐式转换的.请看下面的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
- jvm 之 国际酒店 8 月 19 一次full GC 导致的事故
事故经过: 1 15:18收到短信报警:国际酒店调用OMS queryGorderOrderList方法失败:成单接口调用OMS获取token失败. 2 查看checkList发现15:18开始发 ...
- HashMap的key装换成List
Map<String,Object> map = new HashMap<String,Object>(); map.put("a","32332 ...
- hdu 4726 Kia's Calculation
思路:刚开始想复杂了. 看解题报告后才知道这题挺简单的,看来还是要多训练啊!!! 单独处理首位的数字,不能为0.其他的就好处理了,从大到小依次找下去就可以了…… 代码如下: #include<i ...
- WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计
上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...
- centOS学习part1:操作系统安装
0 linux作为服务器的主要操作系统,在处理速度以及安全性上都要优于windows,虽然需要很多命令要记,但是一般常用的命令不多,用多了就熟悉了,而且现在很多都要图形界面,也降低了学习成本. cen ...
- 读取本地excel发短信
package com.cmcc.zysoft.sellmanager.controller; import java.io.File; import java.io.FileInputStream; ...
- Java7编程高手进阶读书笔记--final学习
这段时间终于有了一些自己的时间,在网上淘了一本书把java学习下,顺便记下每日的学习心得 工作快两年多了,才知道基础的东西永远看的时候都有一个新的体验,今天中午看了下final,把自己炒的代码贴在这以 ...
- kill -9 和kill
kill pid 在kill进程的同时,会将包删掉该进程所在webapps目录下的文件夹,如iexpense文件夹 kill -9 pid 会强制删掉进程,但是不是删掉该进程所在webapps目录下的 ...
- Ibm-jQuery教程学习笔记
一.概述 1.虽然 jQuery 本身并非一门新的语言.但是,学习其语法有助于我们熟练.灵活地使用它.回顾下我们熟悉的 CSS 语法,不难发现 jQuery 的语法与 CSS 有相似之处. jQuer ...