Angular+Bootstrap+Spring Boot实现分页功能实例代码
需要用到的js
angular.js(用angular.min.js会导致分页控件不显示)
ui-bootstrap-tpls.min.js
angular-animate.js
需要用到的css
bootstrap.min.css
由于本项目使用了路由,所以讲js以及css文件的应用都放在一个主html,请同学们在html页面中添加以上文件
在开始之前,我先简单介绍下分页的原理。
分页的实质其实就是一条sql语句,
比如查找第二页,即第16到第30条数据
在MySQL中是select from table limit 15,15 order by id desc
Sql server中是select from (select 15 from (select (30) from table order by id desc) order by available asc) order by id desc Oracle是(oracle中的row从1开始)select from (select a.,rownum from (select from tablet order by id desc) a ) b where b.rownum between 16 and 30
一般情况下,查询得到的数据采用倒序排序,这样可以将用户最新插入的数据放在最前面。
那么这三条sql语句中的这些数值是怎么计算得到的呢?它们就是根据1、CurrentPage 当前在哪一页 2、PageSize 每页展示多少条 来的到的,后台需要从前端获取这两个数值。又为了告诉用户一共有多少页,我们还要3、TotalSize 一共多少条 。
现在有了上面1 2 3值,我们就可以来进行分页了。在前端我们需要一个Table来帮我们展示数据,还需要一个小控件,让用户去选择第几页,而bootstrap就为我们提供了这个小控件(uib-pagination),大大减轻了我们的工作量。在后端Jpa又为我们提供了分页接口,我们只需要继承JapRepository即可,零代码量!
狼蚁网站SEO优化就重点看Table、uib-pagination以及JapRepository提供的接口的用法。
html页面代码
<div data-ng-controller="QuestionCtrl" class="container" style="width: 1900px;"> <br> <table class="table table-bordered table-hover "> <thead> <tr> <th class="text-center"><input type="checkbox" data-ng-model="allChecked" data-ng-change="checkAll(allChecked)" /></th> <th class="text-center">序号</th> <th class="text-center">题目</th> <th class="text-center">A</th> <th class="text-center">B</th> <th class="text-center">C</th> <th class="text-center">D</th> <th class="text-center">答案</th> <th class="text-center">答题数</th> <th class="text-center">正确数</th> <th class="text-center">正确率</th> </tr> </thead> <tbody> <tr data-ng-repeat="item in items"> <td class="text-center"><input type="checkbox" data-ng-model="item.$checked" data-ng-changed="checkedChange(item.id,item.$checked)"/></td> <td class="text-center"><span data-ng-bind="$index+1"></span></td> <td class="text-center" data-ng-bind="item.test"></td> <td class="text-center" data-ng-bind="item.op1"></td> <td class="text-center" data-ng-bind="item.op2"></td> <td class="text-center" data-ng-bind="item.op3"></td> <td class="text-center" data-ng-bind="item.op4"></td> <td class="text-center" data-ng-bind="item.answer"></td> <td class="text-center" data-ng-bind="item.total"></td> <td class="text-center" data-ng-bind="item.totalCorrect"></td> <td class="text-center"> <span data-ng-if="item.total!=0" data-ng-bind="item.totalCorrect / item.total 100 | number:2 "></span> <span data-ng-if="item.total==0" data-ng-bind="0"></span> %</td> </tr> </tbody> </table> <div class="text-right"> <button class="btn btn-defualt" style="float: left" data-ng-click="deleteItems()">删除</button> <span style="color:#ff0000;"><uib-pagination total-items="TotalItems" ng-model="currentPage" items-per-page = "numPerPage" max-size="maxSize" class="pagination" first-text="首页" previous-text="上一页" next-text="下一页" last-text="末页" boundary-links="true" ng-change="pageChanged()" force-ellipses="false"></uib-pagination></span> </div> </div>
分页是通过 uib-pagination 标签来实现的,用到标签属性有
total-items:表示总共有多少条记录
items-per-page:每一页显示多少条记录
max-size:决定用户看到的页数,即选择页面的按钮,不理解的同学可以调整这个数值查看变化
ng-model:当前所在页面
以上4个属性的值与js双向绑定
boundary-link:显示“首页”、“末页”按钮
force-ellipses:当值为true时,超过max-size的也会以省略号的形式展现
js代码如下
var app = angular.module("APP",['ui.bootstrap', 'ngAnimate']); app.controller('QuestionCtrl', function($scope, $uibModal, $http) { <span style="color:#ff0000;">$scope.currentPage = 1;//当前页 $scope.numPerPage = 15; $scope.maxSize = 5; $http({ url : '/getExamsByPage', method : 'post', params : { 'currentPage' : $scope.currentPage - 1, 'numPerPage' : $scope.numPerPage } }).suess(function(response) { $scope.TotalItems = response.totalElements; $scope.items = response.content; }); $scope.pageChanged = function() { $http({ url : '/getExamsByPage', method : 'post', params : { 'currentPage' : $scope.currentPage - 1, 'numPerPage' : $scope.numPerPage } }).suess(function(response) { $scope.TotalItems = response.totalElements; $scope.items = response.content; }); }</span> $scope.checkAll = function(checked) { angular.forEach($scope.items, function(item) { item.$checked = checked; }); }; $scope.deleteExam = function(id) { $http({ url : '/deleteexam', method : 'post', params : { 'id' : id, 'currentPage' : $scope.currentPage - 1, 'numPerPage' : $scope.numPerPage } }).suess(function(response) { $scope.TotalItems = response.totalElements; $scope.items = response.content; }); } $scope.deleteItems = function() { var checkedlist = new Array(); angular.forEach($scope.items, function(item) { if (item.$checked == true) checkedlist.push(item.id); }); $http({ url : "/deleteexams", method : "post", params : { 'ids' : checkedlist, 'currentPage' : $scope.currentPage - 1, 'numPerPage' : $scope.numPerPage } }).suess(function(response) { $scope.TotalItems = response.totalElements; $scope.items = response.content; }); }; });
每次请求后台需要将当前页以及每页的数量发送到后台。
前台接受到的json数据是这样的
{"content":[{"id":225,"test":"办公自动化是计算机的一项应用,按计算机应用分类,它属于____。","op1":"数据处理","op2":"科学计算","op3":"实时控制","op4":"辅助设计","answer":"A","total":2,"totalCorrect":1},{"id":224,"test":"软件由___和文档两部分组成。","op1":"数据","op2":"指令","op3":"程序","op4":"工具","answer":"C","total":2,"totalCorrect":1},{"id":223,"test":"为达到某一目的而编写的计算机指令序列称为____。","op1":"软件","op2":"字符串","op3":"程序","op4":"命令","answer":"C","total":2,"totalCorrect":1},{"id":222,"test":"办公自动化是计算机的一项应用,按计算机应用分类,它属于____。","op1":"数据处理","op2":"科学计算","op3":"实时控制","op4":"辅助设计","answer":"A","total":2,"totalCorrect":1},{"id":220,"test":"为达到某一目的而编写的计算机指令序列称为____。","op1":"软件","op2":"字符串","op3":"程序","op4":"命令","answer":"C","total":2,"totalCorrect":1},{"id":219,"test":"办公自动化是计算机的一项应用,按计算机应用分类,它属于____。","op1":"数据处理","op2":"科学计算","op3":"实时控制","op4":"辅助设计","answer":"A","total":2,"totalCorrect":1},{"id":218,"test":"软件由___和文档两部分组成。","op1":"数据","op2":"指令","op3":"程序","op4":"工具","answer":"C","total":2,"totalCorrect":1},{"id":217,"test":"为达到某一目的而编写的计算机指令序列称为____。","op1":"软件","op2":"字符串","op3":"程序","op4":"命令","answer":"C","total":2,"totalCorrect":1},{"id":216,"test":"办公自动化是计算机的一项应用,按计算机应用分类,它属于____。","op1":"数据处理","op2":"科学计算","op3":"实时控制","op4":"辅助设计","answer":"A","total":2,"totalCorrect":1},{"id":215,"test":"软件由___和文档两部分组成。","op1":"数据","op2":"指令","op3":"程序","op4":"工具","answer":"C","total":2,"totalCorrect":1}],"last":false,"totalPages":9,"totalElements":86,"number":0,"size":10,"sort":[{"direction":"DESC","property":"id","ignoreCase":false,"nullHandling":"NATIVE","ascending":false}],"numberOfElements":10,"first":true}
后台controller代码
@RequestMapping(value = "/getExamsByPage") @ResponseBody public Page<Exam> getExamsByPage(@RequestParam(value = "currentPage",defaultValue = "0") Integer page, @RequestParam(value = "numPerPage",defaultValue = "10") Integer pageSize) { Sort sort = new Sort(Direction.DESC, "id");//设置排序方式 Pageable pageable = new PageRequest(page, pageSize, sort);//构建Pageable对象,改分页查询是通过jpa的PagingAndSortingRepository接口完成的 Page<Exam> Exams = examrepository.findAll(pageable); return Exams; }
repository代码
@Transactional public interface ExamRepository extends JpaRepository<Exam, Integer> { }
contoller中调用的findAll方法是PagingAndSortingRepository实现的,JpaRepository继承自PagingAndSortingRepository,也有findAll方法,不明白的同学可以去查阅改接口的资料。
这样就完成了分页显示,图片如下
以上所述是长沙网络推广给大家介绍的Angular+Bootstrap+Spring Boot实现分页功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,长沙网络推广会及时回复大家的。在此也非常感谢大家对狼蚁SEO网站的支持!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程