遇到的问题
1.本来在onload执行加载数据,但是因为要在这个页面跳转到下一个页面修改数据,再返回到这个页面,所以就把初始化数据写到onshow中,只要进入页面就触发请求初始化数据。
2.但是当在a页面加载更多的是时候进入b页面再返回到a页面,此时页面触发了加载更多函数,而且页面页面位置不在顶部,为了解决这个问题,我粗鲁的让页面在onshow里面直接执行回到顶部函数。
3.
a:加载更多函数时候把hasmore锁死了即当加载完毕时候把hasmore设置成false,导致跳到下一个页面再返回来时候hasmore还是false,则无法进行加载更多函数
b:加载到最后一页的时候pageNo变成了最大值,这时候跳转到下一个页面又返回到这个页面时候pageNo仍是最大值,导致无法进行加载更多函数。
解决:
1.初始化第一个页面时候即onshow函数中设置hasmore为true,设置pageNo为1,即防止hasmore锁死和pageNo值改变的问题,
2.上拉刷新,即onPullDownRefresh时,同时设置pageNo为1,hasmore为true,防止加载到最底部时候hasmore为false时候锁死,则上拉刷新后请求第一页的数据但是却没法加载更多的情况。
onshow函数里面调用直接上拉刷新函数,当数据改变进来时候直接可以看,
下拉刷新函数
onPullDownRefresh: function() {
wx.showNavigationBarLoading()
this.data.pageNo = 1;
this.data.hasMore = true;
this.data.loading = false;
this.setData({
noresult:false
})
let hz = app.globalData.userData.hydm;
// let hz=this.data.hz
let pageSize = this.data.pageSize;
let pageNo=1;
fabuModel.getFabu(hz, pageSize, 1).then(res => {
if (res.error_code = "0") {
this.setData({
listData: res.data,
})
if (pageNo * pageSize < res.totalRecords) {
// 还有 数据
this.setData({
hasMore: true,
})
} else {
this.setData({
hasMore: false
})
}
wx.hideNavigationBarLoading();
wx.stopPullDownRefresh();
} else {
wx.showToast({
title: res.error_message,
icon: "none"
})
}
})
},
上拉加载更多函数
onReachBottom: function() {
if (!this.data.hasMore) {
return;
}
let hz = app.globalData.userData.hydm;
this.data.pageNo++
let pageSize = this.data.pageSize;
let pageNo = this.data.pageNo;
// 解决拉的快一次发送多个请求
// 表示正在发送请求
if (this.data.loading) {
return
}
if (this.data.hasMore) {
fabuModel.getFabu(hz, pageSize, pageNo).then(res => {
// 请求之前为true,锁住,不会重复请求
this.data.loading = true;
if (res.error_code = "0") {
if (pageNo * pageSize < res.totalRecords) {
// 还有 数据
this.setData({
hasMore: true,
})
} else {
this.setData({
hasMore: false,
noresult: true
})
}
// paginationBev.setMoreData(res.data)
const tempArray = this.data.listData.concat(res.data);
this.setData({
listData: tempArray
})
this.data.loading = false;
} else {
wx.showToast({
title: res.error_message,
icon: "none"
})
this.data.loading = false;
}
}).catch(err => {
this.loading = false
})
}
},
onshow中直接调用回到顶部函数
//返回顶部
backToTop: function() {
wx.pageScrollTo({
scrollTop: 0,
duration: 400
});
},
以上就是暂时遇到的问题。