Vue?uni-app框架實現(xiàn)上拉加載下拉刷新功能
實現(xiàn)上拉加載更多
打開項目根目錄中的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é)點平級,聲明onReachBottom
事件處理函數(shù),用來監(jiān)聽頁面的上拉觸底行為:
// 觸底的事件 onReachBottom() { // 讓頁碼值自增 +1 this.queryObj.pagenum += 1 // 重新獲取列表數(shù)據(jù) this.getGoodsList() }
改造methods
中的getGoodsList
函數(shù),當列表數(shù)據(jù)請求成功之后,進行新舊數(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ù)賦值:通過展開運算符的形式,進行新舊數(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ù)前后,分別打開和關閉節(jié)流閥:
// 獲取商品列表數(shù)據(jù)的方法 async getGoodsList() { // ** 打開節(jié)流閥 this.isloading = true // 發(fā)起請求 const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj) // ** 關閉節(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ù)了:
當前的頁碼值 * 每頁顯示多少條數(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() }
實現(xiàn)下拉刷新
在pages.json
配置文件中,為當前的goods_list
頁面單獨開啟下拉刷新效果:
"subPackages": [{ "root": "subpkg", "pages": [{ "path": "goods_detail/goods_detail", "style": {} }, { "path": "goods_list/goods_list", "style": { "onReachBottomDistance": 150, "enablePullDownRefresh": true, "backgroundColor": "#F8F8F8" } }, { "path": "search/search", "style": {} }] }]
監(jiān)聽頁面的onPullDownRefresh
事件處理函數(shù):
// 下拉刷新的事件 onPullDownRefresh() { // 1. 重置關鍵數(shù)據(jù) this.queryObj.pagenum = 1 this.total = 0 this.isloading = false this.goodsList = [] // 2. 重新發(fā)起請求 this.getGoodsList(() => uni.stopPullDownRefresh()) }
修改getGoodsList
函數(shù),接收cb
回調函數(shù)并按需進行調用:
// 獲取商品列表數(shù)據(jù)的方法 async getGoodsList(cb) { this.isloading = true const { data: res } = await uni.$http.get('/api/public/v1/goods/search', this.queryObj) this.isloading = false // 只要數(shù)據(jù)請求完畢,就立即按需調用 cb 回調函數(shù) cb && cb() if (res.meta.status !== 200) return uni.$showMsg() this.goodsList = [...this.goodsList, ...res.message.goods] this.total = res.message.total }
到此這篇關于Vue uni-app框架實現(xiàn)上拉加載下拉刷新功能的文章就介紹到這了,更多相關Vue uni-app內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解關于element級聯(lián)選擇器數(shù)據(jù)回顯問題
這篇文章主要介紹了詳解關于element級聯(lián)選擇器數(shù)據(jù)回顯問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02vue中keep-alive組件實現(xiàn)多級嵌套路由的緩存
本文主要介紹了vue中keep-alive組件實現(xiàn)多級嵌套路由的緩存,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03