AngularJS上拉加载问题解决方法


Posted in Javascript onMay 23, 2016

项目中始终存在一个问题:当在搜索栏输入关键词后(见图1),按照既定的业务逻辑应该是服务端接收到请求后,首先返回查询的前7条数据,待客户端出现上拉加载时,继续查找另外7条数据。但实际情形是不确定的,在服务端控制台(见图2)可看到begno一直到了126,也就是相当于客户端往服务端请求了127次,这是一个令人无法忍受的结果。

AngularJS上拉加载问题解决方法 

图1 客户端搜索栏

AngularJS上拉加载问题解决方法

图2 服务端控制台

可以断定是客户端的业务逻辑出现了问题。返回到客户端,查看源码逻辑,修改如下:

控制器

$scope.medsearchMore = function() { 
console.log("上拉加载....." + isfinished); 
if (isfinished == 0) { 
begno += pcnt; 
var data = { 
"begno" : begno, // 起始序号 
"pagenum" : pagenum, // 每页返回条数 
"searchby": searchby 
}; 
if (searchType == 1) { 
data.classid = searchKey; 
console.log(data.classid); //--------1 
appCallServer($http, "9002", data, function(data) { 
console.log("下拉刷新查询结果rootScope.med:" + JSON.stringify(data.data)); 
for (var i = 0; i < data.pcnt; i++) { 
$rootScope.med.push(data.data[i]); 
} 
// 更新状态 
isfinished = data.isfinished; 
// 药品已查询完毕 
if(isfinished == '1'){ 
$scope.noMore = true; 
}else{ 
$scope.noMore = false; 
} 
pcnt = data.pcnt; 
}, function(data) { 
// 药品已查询完毕 
$scope.noMore = true; 
$ionicLoading.show({ 
template: data.errtext 
}); 
$timeout(function() { 
$ionicLoading.hide(); 
}, 1200); 
}); 
} 
} else { 
// 药品已查询完毕 
$scope.noMore = true; 
} 
$timeout(function() { 
$scope.$broadcast('scroll.infiniteScrollComplete'); 
}, 1200); 
};

视图

<!--当用户到达页脚或页脚附近时,ion-infinite-scroll指令允许你调用一个函数 。当用户滚动的距离超出底部的内容时,就会触发你指定的on-infinite--> 
<!--当没有更多数据加载时,就可以用一个简单的方法阻止无限滚动,那就是angular的ng-if指令--> 
<!--设置noMore初始值为true首次即点击分类查询时不进行下拉加载操作--> 
<ion-infinite-scroll on-infinite="medsearchMore()" distance="0.01%" icon="ion-loading-c"></ion-infinite-scroll> 
<div class="item" ng-if="noMore" align="center"><p>没有更多的药品了</p></div>

经过以上修改,可以实现避免不必要的请求。

AngularJS上拉加载问题解决方法

Javascript 相关文章推荐
jquery.validate分组验证代码
Mar 17 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
Dec 26 Javascript
js模拟滚动条(横向竖向)
Feb 22 Javascript
JavaScript 32位整型无符号操作示例
Dec 08 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
Jun 15 Javascript
简介JavaScript中toUpperCase()方法的使用
Jun 06 Javascript
jQuery简单实现中间浮窗效果
Sep 04 Javascript
使用socket.io制做简易WEB聊天室
Jan 02 Javascript
使用vuex的state状态对象的5种方式
Apr 19 Javascript
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
js仿淘宝放大镜效果
Dec 28 Javascript
在IE8上JS实现combobox支持拼音检索功能
May 23 #Javascript
浅析JavaScript 箭头函数 generator Date JSON
May 23 #Javascript
用js实现放大镜的效果的简单实例
May 23 #Javascript
jQuery实现摸拟alert提示框
May 22 #Javascript
javascript实现标签切换代码示例
May 22 #Javascript
超实用的JavaScript代码段 附使用方法
May 22 #Javascript
JavaScript数组合并的多种方法
May 22 #Javascript
You might like
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
js创建数组的简单方法
2016/07/27 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
Python with的用法
2014/08/22 Python
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
python用插值法绘制平滑曲线
2021/02/19 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
python如何将图片转换素描画
2020/09/08 Python
python中温度单位转换的实例方法
2020/12/27 Python
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
《红军不怕远征难》教学反思
2014/04/14 职场文书
实用求职信模板范文
2019/05/13 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
Python实现天气查询软件
2021/06/07 Python