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

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

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

實現(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ù),當(dāng)列表數(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ù)前后,分別打開和關(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()
}

實現(xiàn)下拉刷新

pages.json配置文件中,為當(dāng)前的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. 重置關(guān)鍵數(shù)據(jù)
  this.queryObj.pagenum = 1
  this.total = 0
  this.isloading = false
  this.goodsList = []
  // 2. 重新發(fā)起請求
  this.getGoodsList(() => uni.stopPullDownRefresh())
}

修改getGoodsList函數(shù),接收cb回調(diào)函數(shù)并按需進行調(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ù)請求完畢,就立即按需調(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框架實現(xiàn)上拉加載下拉刷新功能的文章就介紹到這了,更多相關(guān)Vue uni-app內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue+px2rem實現(xiàn)pc端大屏自適應(yīng)的實例代碼(rem適配)

    vue+px2rem實現(xiàn)pc端大屏自適應(yīng)的實例代碼(rem適配)

    不管是移動端的適配,還是大屏需求,都離不開不一個單位rem,rem是相對于根元素的字體大小的單位,下面這篇文章主要給大家介紹了關(guān)于vue+px2rem實現(xiàn)pc端大屏自適應(yīng)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • apache和nginx下vue頁面刷新404的解決方案

    apache和nginx下vue頁面刷新404的解決方案

    這篇文章主要介紹了apache和nginx下vue頁面刷新404的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 圖文詳解Vue3沒有代碼提示問題的解決辦法

    圖文詳解Vue3沒有代碼提示問題的解決辦法

    最近在使用Vue.js時候沒有自動提示,就很難受,下面這篇文章主要給大家介紹了關(guān)于Vue3沒有代碼提示問題的解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • element的el-form-item的prop作用小結(jié)

    element的el-form-item的prop作用小結(jié)

    Vue表單驗證中的prop屬性用于指定需要驗證的表單字段,它定義了字段名稱并與驗證規(guī)則關(guān)聯(lián),確保數(shù)據(jù)的完整性和準(zhǔn)確性,本文就來介紹一下element的el-form-item的prop作用,感興趣的可以了解一下
    2025-01-01
  • vuex + axios 做登錄驗證 并且保存登錄狀態(tài)的實例

    vuex + axios 做登錄驗證 并且保存登錄狀態(tài)的實例

    今天小編就為大家分享一篇vuex + axios 做登錄驗證 并且保存登錄狀態(tài)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue如何判斷數(shù)組中的對象是否包含某個值

    vue如何判斷數(shù)組中的對象是否包含某個值

    這篇文章主要介紹了vue如何判斷數(shù)組中的對象是否包含某個值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 分享一個vue項目“腳手架”項目的實現(xiàn)步驟

    分享一個vue項目“腳手架”項目的實現(xiàn)步驟

    這篇文章主要介紹了分享一個vue項目“腳手架”項目的實現(xiàn)步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 如何在Vue3中使用視頻庫Video.js實現(xiàn)視頻播放功能

    如何在Vue3中使用視頻庫Video.js實現(xiàn)視頻播放功能

    在Vue3項目中集成Video.js庫,可以創(chuàng)建強大的視頻播放功能,這篇文章主要介紹了如何在Vue3中使用視頻庫Video.js實現(xiàn)視頻播放功能,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • Vue data的數(shù)據(jù)響應(yīng)式到底是如何實現(xiàn)的

    Vue data的數(shù)據(jù)響應(yīng)式到底是如何實現(xiàn)的

    這篇文章主要介紹了Vue data的數(shù)據(jù)響應(yīng)式到底是如何實現(xiàn)的,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • vue項目如何引入json數(shù)據(jù)

    vue項目如何引入json數(shù)據(jù)

    這篇文章主要介紹了vue項目如何引入json數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

栖霞市| 郴州市| 广灵县| 南和县| 永定县| 东乌珠穆沁旗| 红安县| 阳朔县| 兰州市| 元江| 铜山县| 遂溪县| 怀集县| 勐海县| 盐山县| 海宁市| 宝丰县| 遂平县| 海南省| 夏津县| 绵竹市| 云南省| 崇左市| 寿光市| 陈巴尔虎旗| 张家港市| 遂平县| 卢湾区| 九寨沟县| 蕉岭县| 盐池县| 巴里| 漠河县| 榆社县| 乐陵市| 怀仁县| 威远县| 乌兰察布市| 江川县| 西盟| 中超|