最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue?uni-app框架實(shí)現(xiàn)上拉加載下拉刷新功能

 更新時(shí)間:2022年09月07日 10:45:19   作者:船長在船上  
uni-app是一個(gè)使用Vue.js(opens?new?window)開發(fā)所有前端應(yīng)用的框架,開發(fā)者編寫一套代碼,可發(fā)布到iOS、Android、Web(響應(yīng)式)、以及各種小程序(微信/支付寶/百度/頭條/飛書/QQ/快手/釘釘/淘寶)、快應(yīng)用等多個(gè)平臺(tái)

實(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)平級(jí),聲明onReachBottom事件處理函數(shù),用來監(jiān)聽頁面的上拉觸底行為:

// 觸底的事件
onReachBottom() {
  // 讓頁碼值自增 +1
  this.queryObj.pagenum += 1
  // 重新獲取列表數(shù)據(jù)
  this.getGoodsList()
}

改造methods中的getGoodsList函數(shù),當(dāng)列表數(shù)據(jù)請(qǐng)求成功之后,進(jìn)行新舊數(shù)據(jù)的拼接處理:

// 獲取商品列表數(shù)據(jù)的方法
async getGoodsList() {
  // 發(fā)起請(qǐng)求
  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ā)起額外的請(qǐng)求

在 data 中定義isloading節(jié)流閥如下:

data() {
  return {
    // 是否正在請(qǐng)求數(shù)據(jù)
    isloading: false
  }
}

修改getGoodsList方法,在請(qǐng)求數(shù)據(jù)前后,分別打開和關(guān)閉節(jié)流閥:

// 獲取商品列表數(shù)據(jù)的方法
async getGoodsList() {
  // ** 打開節(jié)流閥
  this.isloading = true
  // 發(fā)起請(qǐng)求
  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ā)起請(qǐng)求:

// 觸底的事件
onReachBottom() {
  // 判斷是否正在請(qǐng)求其它數(shù)據(jù),如果是,則不發(fā)起額外的請(qǐng)求
  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ù)加載完畢!')
  // 判斷是否正在請(qǐng)求其它數(shù)據(jù),如果是,則不發(fā)起額外的請(qǐng)求
  if (this.isloading) return
  this.queryObj.pagenum += 1
  this.getGoodsList()
}

實(shí)現(xiàn)下拉刷新

pages.json配置文件中,為當(dāng)前的goods_list頁面單獨(dú)開啟下拉刷新效果:

"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. 重置關(guān)鍵數(shù)據(jù)
  this.queryObj.pagenum = 1
  this.total = 0
  this.isloading = false
  this.goodsList = []
  // 2. 重新發(fā)起請(qǐng)求
  this.getGoodsList(() => uni.stopPullDownRefresh())
}

修改getGoodsList函數(shù),接收cb回調(diào)函數(shù)并按需進(jìn)行調(diào)用:

// 獲取商品列表數(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ù)請(qǐng)求完畢,就立即按需調(diào)用 cb 回調(diào)函數(shù)
  cb && cb()
  if (res.meta.status !== 200) return uni.$showMsg()
  this.goodsList = [...this.goodsList, ...res.message.goods]
  this.total = res.message.total
}

到此這篇關(guān)于Vue uni-app框架實(shí)現(xiàn)上拉加載下拉刷新功能的文章就介紹到這了,更多相關(guān)Vue uni-app內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

镇平县| 余江县| 巴楚县| 洱源县| 吐鲁番市| 嘉义市| 洛宁县| 张家界市| 太湖县| 桐城市| 龙江县| 阳曲县| 右玉县| 赤城县| 延安市| 铜陵市| 酉阳| 横山县| 常熟市| 司法| 遂溪县| 织金县| 兴宁市| 镇巴县| 思茅市| 青阳县| 汉沽区| 泰宁县| 明光市| 柘荣县| 通山县| 罗定市| 富源县| 汽车| 浮山县| 石河子市| 包头市| 黎城县| 大兴区| 勐海县| 永善县|