AngularJS与BootStrap模仿百度分页的示例代码


Posted in Javascript onMay 23, 2018

模仿百度的每页显示10条数据, 实现了当前页居中的算法.

<!DOCTYPE html>
<html>

 <head>
  <meta charset="UTF-8">
  <title>BootStrap+AngularJS分页显示 </title>
  <script type="text/javascript" src="../js/jquery.js"></script>
  <script type="text/javascript" src="../js/bootstrap.js"></script>
  <link rel="stylesheet" href="../css/bootstrap/bootstrap.css" rel="external nofollow" />
  <script type="text/javascript" src="../js/angular.min.js"></script>
 </head>

 <body ng-app="paginationApp" ng-controller="paginationCtrl">
  <table class="table table-bordered">
   <tr>
    <th>序号</th>
    <th>商品编号</th>
    <th>名称</th>
    <th>价格</th>
   </tr>
   <tr ng-repeat="product in products">
    <td>{{$index+1}}</td>
    <td>{{product.id}}</td>
    <td>{{product.name}}</td>
    <td>{{product.price}}</td>
   </tr>
  </table>
  <div>
   <ul class="pagination pull-right">
    <li>
     <a href ng-click="prev()">上一页</a>
    </li>
    <li ng-repeat="page in pageList" ng-class="{active: isActivePage(page)}">
     <a href ng-click="selectPage(page)">{{page}}</a>
    </li>
    <li>
     <a href ng-click="next()">下一页</a>
    </li>
   </ul>
  </div>
 </body>

 <script type="text/javascript ">
  var paginationApp = angular.module("paginationApp", []);
  paginationApp.controller("paginationCtrl", ["$scope", "$http",
   function($scope, $http) {![现的效果](实现的效果1.jpg)![现的效果](实现的效果1.jpg)
    // 分页组件 必须变量
    $scope.currentPage = 1; // 当前页 (请求数据)
    $scope.pageSize = 4; // 每页记录数 (请求数据)
    $scope.totalCount = 0; // 总记录数 (响应数据)
    $scope.totalPages = 0; // 总页数 (根据 总记录数、每页记录数 计算 )
    
    // 要在分页工具条显示所有页码 
    $scope.pageList = new Array();
    
    
    // 加载上一页数据
    $scope.prev = function(){
     $scope.selectPage($scope.currentPage-1);
    }
    
    // 加载下一页数据 
    $scope.next = function(){
     $scope.selectPage($scope.currentPage+1);
    }
    
    // 加载指定页数据 
    $scope.selectPage = function(page) {
     // page 超出范围 
     if($scope.totalPages != 0 && (page < 1 || page > $scope.totalPages)){
      return ;
     }
     
     $http({
      method: 'GET',
      url: '6_'+page+'.json',
      params: {
       "page" : page , // 页码
       "pageSize" : $scope.pageSize // 每页记录数 
      }
     }).success(function(data, status, headers, config) {
      // 显示表格数据 
      $scope.products = data.products;
      
      // 根据总记录数 计算 总页数 
      $scope.totalCount = data.totalCount;
      $scope.totalPages = Math.ceil($scope.totalCount / $scope.pageSize);
      // 更新当前显示页码 
      $scope.currentPage = page ;
      
      // 显示分页工具条中页码 
      var begin ; // 显示第一个页码
      var end ; // 显示最后一个页码 
      
      // 理论上 begin 是当前页 -5 
      begin = $scope.currentPage - 5 ;
      if(begin < 1){ // 第一个页码 不能小于1 
       begin = 1 ;
      }
      
      // 显示10个页码,理论上end 是 begin + 9
      end = begin + 9; 
      if(end > $scope.totalPages ){// 最后一个页码不能大于总页数
       end = $scope.totalPages; 
      }
      
      // 修正begin 的值, 理论上 begin 是 end - 9
      begin = end - 9;
      if(begin < 1){ // 第一个页码 不能小于1 
       begin = 1 ;
      }
      
      
      // 要在分页工具条显示所有页码 
      $scope.pageList = new Array();
      // 将页码加入 PageList集合
      for(var i=begin ; i<= end ;i++){
       $scope.pageList.push(i);
      }
 
     }).error(function(data, status, headers, config) {
      // 当响应以错误状态返回时调用
      alert("出错,请联系管理员 ");
     });
    }
    
    // 判断是否为当前页 
    $scope.isActivePage = function(page) {
     return page === $scope.currentPage;
    }
    
    // 初始化,选中第一页
    $scope.selectPage(1);
   }
  ]);
 </script>
</html>

1_1.json

{
 "totalCount":100,
 "products":[
  {"id":"1001","name":"苹果手机","price":"5000"},
  {"id":"1002","name":"三星手机","price":"6000"}

 ]

}

1_2.json

{
 "totalCount":100,
 "products":[
  {"id":"1001","name":"华为手机","price":"5000"},
  {"id":"1002","name":"vivo手机","price":"6000"}

 ]
}

实现的效果如图:

AngularJS与BootStrap模仿百度分页的示例代码

遇到的问题 : 下面的代码, 如果 把begin不小心写成了0 , 则页码上,会出现从0开始的bug

// 将页码加入 PageList集合
for(var i=begin ; i<= end ;i++){
 $scope.pageList.push(i);
}

如下图所示

AngularJS与BootStrap模仿百度分页的示例代码

原因是begin代表的是页面显示的第一个页码, 如果i从0开始开始遍历, 那么pageList数组中的第一个元素就是0 ,因此在如下的angularJS的遍历页码的过程中, 就会从0开始遍历. 在页面上, 就会显示从0 开始

<li ng-repeat="page in pageList" ng-class="{active: isActivePage(page)}">
     <a href ng-click="selectPage(page)">{{page}}</a>
</li>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery学习笔记之DOM对象和jQuery对象
Dec 22 Javascript
DWZ table的原生分页浅谈
Mar 01 Javascript
JS图片切换的具体方法(带缩略图版)
Nov 12 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 Javascript
js读取配置文件自写
Feb 11 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
Mar 30 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
Aug 14 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
Jul 09 Javascript
vue使用自定义指令实现拖拽
Jan 29 Javascript
react PropTypes校验传递的值操作示例
Apr 28 Javascript
基于redis的小程序登录实现方法流程分析
May 25 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
May 22 #jQuery
vue的传参方式汇总和router使用技巧
May 22 #Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
May 22 #Javascript
Vue.js实现的表格增加删除demo示例
May 22 #Javascript
详解Chart.js轻量级图表库的使用经验
May 22 #Javascript
VUE2.0中Jsonp的使用方法
May 22 #Javascript
mpvue构建小程序的方法(步骤+地址)
May 22 #Javascript
You might like
怎样在UNIX系统下安装php3
2006/10/09 PHP
php实现的mongodb操作类
2015/05/28 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
详解js的六大数据类型
2016/12/27 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python自定义类并使用的方法
2015/05/07 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
python实现梯度下降算法
2020/03/24 Python
python内置数据类型之列表操作
2018/11/12 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
旷课检讨书3000字
2014/02/04 职场文书
房屋出售授权委托书
2014/10/12 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书