在微信小程序中提供了下拉刷新的api(onPullDownRefresh()),那么实现下拉刷新的业务就是再下拉的时候,在原有的数据中追加新的数据
2.1 坑一
onPullDownRefresh: function () {
var _this =this;
/**显示loading */
wx.showNavigationBarLoading();
_this.newsrequest(_this.data.page);
wx.stopPullDownRefresh();
wx.hideNavigationBarLoading();
// console.log(_this.data.newslists)
},
/**请求数据 */
newsrequest:function(page){
var _this=this;
// console.log(_this.data.page)
requstFfunc.requestData('https://xxxx.cn/Public/Api/index.php', { service: 'Default.Archives', typeid: '44', orderby: '4', page:page, pagesize: '10' }).then(function (data) {
var result = _this.newsdatadecorate(data.data.data.list);
console.log(page)
console.log(result)
var arr=_this.data.newslists;
if (result.length>0){
/*此时会发现数据被添加到原有数据的后边类似上拉加载更多*/
_this.setData({
newslists: _this.data.newslists.concat(result)
});
_this.data.page++;
}
})
},
我们知道数组的concat方法时讲参数数组拼接到原有数据后边,所以与我们想要的追加在前面不想符合,想想该数组前面追加的方法时unshift()更改代码:
2.2坑二
有人说concat方法时在数据后边追加,那么只要再使用数组反转reverse()将数组反转,仔细想想,这种数据不是我们想要的下拉刷新的
var arr1 = [1,2,3,4];//原来的数据
var arr2 = [5,6,7,8];//后来的数据
var arr3 = arr1.concat(arr2);//[1,2,3,4,5,6,7,8];
var arr4 = arr3.reverse();//[8,7,6,5,4,3,2,1]
//但是我们想要的应该是
var arr5 =[5,6,7,8,1,2,3,4]
newsrequest:function(page){
var _this=this;
// console.log(_this.data.page)
requstFfunc.requestData('https://xxxx.cn/Public/Api/index.php', { service: 'Default.Archives', typeid: '44', orderby: '4', page:page, pagesize: '10' }).then(function (data) {
var result = _this.newsdatadecorate(data.data.data.list);
console.log(page)
console.log(result)
var arr=_this.data.newslists;
if (result.length>0){
_this.setData({
newslists: _this.data.newslists.concat(result).reverse()
})
_this.data.page++;
}
})
},
2.2坑三
newsrequest:function(page){
var _this=this;
// console.log(_this.data.page)
requstFfunc.requestData('https://xxxx.cn/Public/Api/index.php', { service: 'Default.Archives', typeid: '44', orderby: '4', page:page, pagesize: '10' }).then(function (data) {
var result = _this.newsdatadecorate(data.data.data.list);
console.log(page)
console.log(result)
var arr=_this.data.newslists;
if (result.length>0){
for(var t in result){
_this.data.newslists.unshift(result[t])
}
_this.data.page++;
}
})
},
但是页面的数据不显示,具体原因不详,应该是this.data.方法设置数据,应该和页面的生命周期有关,在数据设置时,页面已渲染,(自己想想的,不知道对不对)
这是我们就可以通过中介,将数据拼接好了之后,再通过this.setData()方法设置数据,这时就可以正常显示
newsrequest:function(page){
var _this=this;
// console.log(_this.data.page)
requstFfunc.requestData('https://xxxx.cn/Public/Api/index.php', { service: 'Default.Archives', typeid: '44', orderby: '4', page:page, pagesize: '10' }).then(function (data) {
var result = _this.newsdatadecorate(data.data.data.list);
var arr=_this.data.newslists;
if (result.length>0){
for(var v in result){
arr.unshift(result[v])
};
_this.setData({
newslists:arr
});
_this.data.page++;
}
})
},
上述方案虽然成功了实现了数据追加,但是。。。且看下边代码
var arr1 = [1,2,3,4];//原来的数据
var arr2 = [5,6,7,8];//后来的数据
var arr3 = arr2.concat(arr1);//[5,6,7,8,1,2,3,4];
//但是我们想要的应该是
var arr5 =[5,6,7,8,1,2,3,4]
//此时两个数据是不是一致的呢
newsrequest:function(page){
var _this=this;
// console.log(_this.data.page)
requstFfunc.requestData('https://xxxx.cn/Public/Api/index.php', { service: 'Default.Archives', typeid: '44', orderby: '4', page:page, pagesize: '10' }).then(function (data) {
var result = _this.newsdatadecorate(data.data.data.list);
console.log(page)
console.log(result)
var arr=_this.data.newslists;
if (result.length>0){
_this.setData({
newslists: result.concat(_this.data.newslists)
});
_this.data.page++;
}
})
},
最新动态
常见问题百宝箱
A2014,有位学妹不顾家人反对,在上海这个国际化大都市谋了一个公众号助理的职位。斗志昂扬地奋斗了 3 年,我眼看着她的内容驾驭能力突飞猛进,内容质量从三流到一流,职位
A文章主要分析了不同的视觉设计元素是如何影响网站用户体验,希望通过文章的解读能够对你的产品设计带来些启发。 也许是因为我在视觉设计上没有太多经验,我发现
A双赢系统建站系统,三网同步,建站推广一步到位双赢系统建站系统,三网同步,建站推广一步到位双赢系统建站系统,三网同步,建站推广一步到位双赢系统建站系统,三网同步,建站推
Copyright 2013-2020 All Rights Reserved 武汉互赢网络科技股份有限公司 鄂ICP备19027860号