JS实现分页操作

前言

项目开发过程中,进行查询操作时有可能会检索出大量的满足条件的查询结果。在一页中显示全部查询结果会降低用户的体验感,故需要实现分页显示效果。受前面“JS实现时间选择插件”的启发,自己首先需要查看一下HTML5能否实现此效果。

整了半天,不管是用纯CSS3也好,还是用tmpagination.js还是bootstrap组件也好,到最后自己静下心来理一理,也就豁然开朗了,其实分页很容易,无非就是两种方式:请求一次,然后将分页交给前台处理,不过这种比较占内存,还有一种就是根据设置的起始页、每页数据量来分批次请求服务端,以此达到分页的效果。对比之前移动端实现的下拉刷新操作,其实也是分页的一种实现方式。按照移动端的实现思路,自己再次实现一次分页操作。

在做分页过程中,自己迷糊了一把。实际思路应是这样的:分页应是针对最后的查询结果而言的。紧抓这一点才是解决问题的关键。

由于业务逻辑的关系,搞了一天,分页只做了一部分,继续加油!

SQL语句对比

3种sql统计语句(统计非重复记录)的对比

select count(billid) from lm_bill_dtl where medid='感冒灵颗粒' OR medname LIKE '感冒灵颗粒%' AND cnt='0'

结果:167

select count(distinct(billid)) from lm_bill_dtl where medid='感冒灵颗粒' OR medname LIKE '感冒灵颗粒%' AND cnt='0'

结果:167

select count(distinct(billid)) from lm_bill_dtl where medid='感冒灵颗粒' OR medname LIKE '感冒灵颗粒%'

结果:179

结合自己的业务员数据综合分析,最后一种统计方法是正确的,因为有的药品存在于订单详情中的第二位,这样的话,前两种统计方法得出的结果均为0,而第三种方法却可以得出正确结果。以以下sql语句为例:

select count(distinct(billid)) from lm_bill_dtl where medid='六味增食合剂' OR medname LIKE '六味增食合剂%' AND cnt='0'

结果:0

select count(distinct(billid)) from lm_bill_dtl where medid='六味增食合剂' OR medname LIKE '六味增食合剂%'

结果:1

使用前后台响应的方式进行分页遇到了问题:数据丢失,页码计算不正确。

在将复杂的“平台管理”模块成功完成分页之后,对其他各需要分页的模块进行分页操作。加油!

困惑

三天时间终于把项目中所有需要实现分页效果的页面全部实现了。不过自己还是遇到了一个奇怪的问题:在药店端的订单维护页面相应的控制器中,按照前面的编码思想进行分页操作,结果发现药店端左侧的导航栏失效,点击没有反应。通过查看Chrome调试器,错误提示如下:

显示获取不到相应的翻页ID,自己就纳了闷了,不可能啊,前面都表现的好好的,到这怎么就不行了呢。于是自己写了alert(btn_PrePage);语句输出相应button的ID,结果显示如下:

难道是因为没有获取到相应的ID值,不可能啊,在网上搜索了一番,最后得出的结论是:js代码需要写在html代码之后,也就是必须先得等html加载完毕,才能获取相应组件ID。于是自己在别的页面尝试相应的操作,结果发现均获取不到值,自己就更纳闷了,获取不到值?但是后面与组件ID相关的操作都表现正常啊!在html页面中的javascript脚本中也同样是获取不到ID值,纳闷!但是操作均一切正常啊,难道这是一个潜在的巨大BUG?!不能吧?!

结合代码查看,错误发生在initFun()方法体中。

$scope.initFun = function(){

....

unDisplayBtn(btn_PrePage); // 进入查询结果列表首页时"上一页"按钮不可用

unDisplayBtn(btn_NextPage);// 进入查询结果列表首页时"下一页"按钮不可用

};

感悟

随着对数据库操作的逐渐了解,自己慢慢意识到熟悉数据库的各种查询技术十分重要,各种管理系统,说到底,其实就是对数据库的各种操作,有时一条SQL语句就可以解决稍显复杂的问题。

核心代码

//控件生效控制函数
function displayBtn(object)
{
var ui = object;

ui.removeAttribute("disabled");
}

// 控件失效控制函数
function unDisplayBtn(object)
{
var ui = object;

ui.setAttribute("disabled", true);
}
var btn_PrePage = document.getElementById("PrePage");
var btn_NextPage = document.getElementById("NextPage");

$scope.totalItems = data.cnt;
// 若总数据条数小于单页显示数
if(data.cnt < pagenum){
unDisplayBtn(btn_PrePage);	// 进入查询结果列表首页时"上一页"按钮不可用
unDisplayBtn(btn_NextPage);// 进入查询结果列表首页时"下一页"按钮不可用
}
// 匹配正浮点数
if(checkFloat(data.cnt/pagenum)){
$scope.pageCnt = Math.ceil(data.cnt/pagenum);	// 总页数
}else{
$scope.pageCnt = data.cnt/pagenum;	// 总页数

效果图

参考文献

1.http://www.cnblogs.com/sword-successful/archive/2015/06/28/4605222.html

2.http://www.miaoyueyue.com/archives/813.html

3.http://www.runoob.com/bootstrap/bootstrap-pagination.html

4.http://www.html5tricks.com/tag/%E5%88%86%E9%A1%B5%E6%8F%92%E4%BB%B6

5.http://www.sjyhome.com/html/html-special-characters.html

美文美图

AngularJS进阶(二十六)实现分页操作的更多相关文章

  1. mysql进阶(二十六)MySQL 索引类型(初学者必看)

    mysql进阶(二十六)MySQL 索引类型(初学者必看)   索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型.   在数 ...

  2. AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

    requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...

  3. AngularJS进阶(三十六)AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记)

    AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记) 前言 在"AngularJS项目开发技巧之图片预加载" ...

  4. AngularJS进阶(二十九)AngularJS项目开发技巧之localStorage存储

    AngularJS项目开发技巧之localStorage存储       注: localStorage深度学习 绪 项目开发完毕,测试阶段发现后台管理端二维码生成有问题,问题在于localStora ...

  5. 网站开发进阶(二十六)js刷新页面方法大全

    js刷新页面方法大全 在项目开发过程中,需要实现刷新页面.经过学习,发现下面这条语句就可以轻松实现. location.reload(); // 刷新页面 有关刷新页面的其它方法,具体学习内容如下,有 ...

  6. Java进阶(二十六)公司项目开发知识点回顾

    公司项目开发知识点回顾 前言 "拿来主义"在某些时候并不是最佳选择,尤其是当自己遇到问题的时候,毫无头绪. 在一次实验过程中,需要实现数据库的CRUD操作.由于之前项目开发过程中, ...

  7. AngularJS进阶(二十四)AngularJS与单选框及多选框的双向动态绑定

    AngularJS与单选框及多选框的双向动态绑定      赠人玫瑰,手留余香.若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉! AngularJS 在 <in ...

  8. AngularJS进阶(二十二)实现时间选择插件

    JS实现时间选择插件 引导语 在项目开发过程中,需要实现根据以日期为筛选条件之一,故需要实现时间选择插件.对于未接触的新事物,自己总是感觉不明觉厉.其实,有些实现可以使用很简单的方法即可.以此为例,偶 ...

  9. 二十六、Nodejs 操作 MongoDb 数据库

    一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...

随机推荐

  1. 【Android 应用开发】 Android 各种版本简介 ( Support 支持库版本 | Android Studio 版本 | Gradle 版本 | jcenter 库版本 )

    初学者遇到 Android Studio, 导入工程后, 会出现各种奇葩错误, 如果管理好各个插件, gradle, SDK, SDK Tools, 各种官方依赖库 的版本, 会将错误大大的减少; 这 ...

  2. 深入Java虚拟机(3)——安全

    因为网络允许多台计算机共享数据和分布式处理,所以它提供了一条入侵计算机系统的潜在途径,使得其他人可以窃取信息,改变或破坏信息,盗取计算机资源等等.为了解决由网络引起的安全问题,Java体系结构采用了一 ...

  3. 20160212.CCPP体系详解(0022天)

    程序片段(01):01.二维数组.c 内容概要:二维数组 #include <stdio.h> #include <stdlib.h> //01.关于栈内存开辟数组: // 诀 ...

  4. Android应用UI设计流程

    Android应用UI设计流程 设计原理 1.在移动设计中,使用环境是最关键的因素.原型设计方法必须考虑尺寸因素 2.用户测试必须涵盖运动.声音和多点触控等方面: 进行移动设计和测试时,请将你知道的有 ...

  5. Github上的Android项目介绍之ListViewAnimation(针对listView item的侧滑菜单)(1)

    demo源码,需要可以下载 1.这是一个github开源项目,先去github上面下载,github下载地址. 2.将SwipeMenuListView项目,导入,然后新建项目如果要引用,要设置为相应 ...

  6. springMVC源码分析--HandlerInterceptor拦截器(一)

    对SpringMVC有所了解的人肯定接触过HandlerInterceptor拦截器,HandlerInterceptor接口给我们提供了3个方法: (1)preHandle: 在执行controll ...

  7. Android使用shape制作圆形控件及添加弹跳动画

    --------本来为作者原创,未经同意禁止转载 前言:我们在很多时候都需要在res/drawable文件夹下创建相应的xml文件来为控件添加一些样式效果,比如按钮按下时的按钮样式变化.或者指定按钮的 ...

  8. JAVA面向对象-----面向对象(基础预备知识汇总)

    终于整理好了面向对象基础预备知识,但是有点多,所以你们懂的,贴图,较长的代码我还是会排版出来的,我不想把时间浪费在排版上在word里排版一次已经很浪费时间了,所以请谅解. public class C ...

  9. Spark技术内幕: Shuffle详解(二)

    本文主要关注ShuffledRDD的Shuffle Read是如何从其他的node上读取数据的. 上文讲到了获取如何获取的策略都在org.apache.spark.storage.BlockFetch ...

  10. layout文件夹中activity_main.xml与fragment_main.xml文件的处理记录

    androidSDK更新到22.6后新建立项目时在layout文件夹下面出现了activity_main.xml与fragment_main.xml,这是为了在平板开发中使用碎片,但是让不需要碎片的人 ...