uni-app實(shí)現(xiàn)數(shù)據(jù)上拉加載更多功能實(shí)例
實(shí)現(xiàn)上拉加載更多
打開項(xiàng)目根目錄中的 pages.json 配置文件,為 subPackages 分包中的商品 goods_list 頁面配置上拉觸底的距離:
"subPackages": [
{
"root": "subpkg",
"pages": [
{
"path": "goods_detail/goods_detail",
"style": {}
},
{
"path": "goods_list/goods_list",
"style": {
"onReachBottomDistance": 150
}
},
{
"path": "search/search",
"style": {}
}
]
}
]
在 goods_list 頁面中,和 methods 節(jié)點(diǎn)平級,聲明 onReachBottom 事件處理函數(shù),用來監(jiān)聽頁面的上拉觸底行為:
// 觸底的事件
onReachBottom() {
// 讓頁碼值自增 +1
this.queryObj.pagenum += 1
// 重新獲取列表數(shù)據(jù)
this.getGoodsList()
}
改造 methods 中的 getGoodsList 函數(shù),當(dāng)列表數(shù)據(jù)請求成功之后,進(jìn)行新舊數(shù)據(jù)的拼接處理:
// 獲取商品列表數(shù)據(jù)的方法
async getGoodsList() {
// 發(fā)起請求
const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
if (res.meta.status !== 200) return uni.$showMsg()
// 為數(shù)據(jù)賦值:通過展開運(yùn)算符的形式,進(jìn)行新舊數(shù)據(jù)的拼接
this.goodsList = [...this.goodsList, ...res.message.goods]
this.total = res.message.total
}
優(yōu)化:
通過節(jié)流閥防止發(fā)起額外的請求
在 data 中定義 isloading 節(jié)流閥如下:
data() {
return {
// 是否正在請求數(shù)據(jù)
isloading: false
}
}
修改 getGoodsList 方法,在請求數(shù)據(jù)前后,分別打開和關(guān)閉節(jié)流閥:
// 獲取商品列表數(shù)據(jù)的方法
async getGoodsList() {
// ** 打開節(jié)流閥
this.isloading = true
// 發(fā)起請求
const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj)
// ** 關(guān)閉節(jié)流閥
this.isloading = false
// 省略其它代碼...
}
在 onReachBottom 觸底事件處理函數(shù)中,根據(jù)節(jié)流閥的狀態(tài),來決定是否發(fā)起請求:
// 觸底的事件
onReachBottom() {
// 判斷是否正在請求其它數(shù)據(jù),如果是,則不發(fā)起額外的請求
if (this.isloading) return
this.queryObj.pagenum += 1
this.getGoodsList()
}
判斷數(shù)據(jù)是否加載完畢
如果下面的公式成立,則證明沒有下一頁數(shù)據(jù)了:
當(dāng)前的頁碼值 * 每頁顯示多少條數(shù)據(jù) >= 總數(shù)條數(shù)
pagenum * pagesize >= total
修改 onReachBottom 事件處理函數(shù)如下:
// 觸底的事件
onReachBottom() {
// 判斷是否還有下一頁數(shù)據(jù)
if (this.queryObj.pagenum * this.queryObj.pagesize >= this.total) return uni.$showMsg('數(shù)據(jù)加載完畢!')
// 判斷是否正在請求其它數(shù)據(jù),如果是,則不發(fā)起額外的請求
if (this.isloading) return
this.queryObj.pagenum += 1
this.getGoodsList()
}
下一篇:uni-app 數(shù)據(jù)下拉刷新功能
http://m.fzitv.net/article/257740.htm
總結(jié)
到此這篇關(guān)于uni-app實(shí)現(xiàn)數(shù)據(jù)上拉加載更多功能的文章就介紹到這了,更多相關(guān)uni-app數(shù)據(jù)上拉加載更多內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ECharts柱狀排名圖柱子上方顯示文字與圖標(biāo)代碼實(shí)例
我們在繪制柱狀圖時(shí)如果想要柱條上顯示文字,可以參考本文,這篇文章主要給大家介紹了關(guān)于ECharts柱狀排名圖柱子上方顯示文字與圖標(biāo)的相關(guān)資料,需要的朋友可以參考下2023-11-11
原生JS實(shí)現(xiàn)《別踩白塊》游戲(兼容IE)
本文主要介紹了原生JS實(shí)現(xiàn)《別踩白塊》游戲(兼容IE)的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02

