欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vant-list上拉加載onload事件觸發(fā)多次問題及解決

 更新時間:2023年01月17日 16:10:46   作者:weixin_45121510  
這篇文章主要介紹了vant-list上拉加載onload事件觸發(fā)多次問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vant-list上拉加載onload事件觸發(fā)多次

場景

3個tab頁簽切換時,調用不同接口,在某一個tab只要翻頁到>=2的情況,當它再點擊到另一個tab的時候,另外一個tab就會連續(xù)調用兩次查詢接口

(因為它不僅觸發(fā)了created還觸發(fā)了onload事件:且順序為:進入created調用查詢接口,在.then之前,異步查詢還未返回的時候,又會去觸發(fā)onload事件,在current+=1之后再次進行查詢)

知識點運用:

一、基礎用法

List 組件通過 loading 和 finished 兩個變量控制加載狀態(tài),當組件滾動到底部時,會觸發(fā) load事件并將 loading 設置成 true。

此時可以發(fā)起異步操作并更新數(shù)據(jù),數(shù)據(jù)更新完畢后,將 loading 設置成 false 即可。

若數(shù)據(jù)已全部加載完畢,則直接將 finished 設置成 true 即可。

二、List 的運行機制是什么?

List 會監(jiān)聽瀏覽器的滾動事件并計算列表的位置,當列表底部與可視區(qū)域的距離小于offset時,List會觸發(fā)一次 load 事件。

三、為什么 List 初始化后會立即觸發(fā) load 事件?

List 初始化后會觸發(fā)一次 load事件,用于加載第一屏的數(shù)據(jù),這個特性可以通過immediate-check屬性關閉。

四、為什么會連續(xù)觸發(fā) load 事件?

如果一次請求加載的數(shù)據(jù)條數(shù)較少,導致列表內容無法鋪滿當前屏幕,List 會繼續(xù)觸發(fā) load事件,直到內容鋪滿屏幕或數(shù)據(jù)全部加載完成。

因此你需要調整每次獲取的數(shù)據(jù)條數(shù),理想情況下每次請求獲取的數(shù)據(jù)條數(shù)應能夠填滿一屏高度。

五、loading 和 finished 分別是什么含義?

List有以下三種狀態(tài),理解這些狀態(tài)有助于你正確地使用List組件:

  • 非加載中,loading為false,此時會根據(jù)列表滾動位置判斷是否觸發(fā)load事件(列表內容不足一屏幕時,會直接觸發(fā))
  • 加載中,loading為true,表示正在發(fā)送異步請求,此時不會觸發(fā)load事件
  • 加載完成,finished為true,此時不會觸發(fā)load事件 在每次請求完畢后,需要手動將loading設置為false,表示加載結束

這次遇到的問題,可以利用第五點,解決方法:

在進入created的發(fā)送請求之前,將this.loading = true , ⇒⇒⇒ (利用:加載中,loading為true,表示正在發(fā)送異步請求,此時不會觸發(fā)load事件),讓系統(tǒng)知道此時正在異步請求數(shù)據(jù),讓它別觸發(fā)onload事件

代碼:

<van-list
  v-model="loading" class="van-list-style" :immediate-check="false"
  :finished="finished" :finished-text="finishedText"
  :error.sync="error" error-text="請求失敗,點擊重新加載"
  @load="onLoad">
  <div class="list" v-if="dataList.length > 0">
    <div class="list-box2" v-for="(item,index) in dataList" :key="index" @click="handleClick(item)">
      ………………………………………
    </div>
  </div>
  <div v-if="noData" style="margin-top:30%">
    <img src="@/common/imgs/no-data.png" alt="" style="width:100%">
  </div>
</van-list>

data() {
   return {
     dataList:[],
     current:1,
     size:10,
     loading: false, // 上拉加載 ?????? 
     finished: false, // 上拉加載完畢
     error: false, // 是否展示錯誤
     finishedText:"沒有更多了",
     noData:false, // 是否展示沒有數(shù)據(jù)的圖片
     // offset: 100 // 滾動條與底部距離小于 offset 時觸發(fā)load事件
   }
 },

 created() {
   // 調用列表查詢接口
   this.init(this.tab)
 },

methods:{
 init(val) {
   if(val === '1') {
     this.createList(1,10)
   } 
 },
   
//查詢接口
createList(current,size) {
  let param = { current:current, size:size }
  
  // 重點?。。。。。。。。≡谶@里將loading置為true
  ***this.loading = true;***

  createList(param).then(res=>{
    let that = this
    if(res.status == true) {
   	 //賦值
      const dataList = res.body.records
      const pages = res.body.pages
      // 如果返回數(shù)據(jù)為空
      if(dataList == null || dataList.length === 0) {
        that.finished = true
        that.finishedText = "沒發(fā)現(xiàn)任何東西,去其他地方逛逛吧~"
        that.noData = true
        return
      }
      // 加載狀態(tài)結束  可以寫在這里也可以寫在finally里面
      that.loading = false;
      
      // 根據(jù)當前頁進行數(shù)據(jù)處理
      if(that.current === 1) {
        that.dataList = dataList
      } else {
        that.dataList = that.dataList.concat(dataList)
      }

      // xxx?。?!最后一頁不足10條的情況 ,這樣寫實際有問題,因為如果是最后一頁為10條的情況,就會第二次去調用接口
      //if(dataList.length < that.size) {
       // that.finished = true
       //that.finishedText = '沒有更多了';
      //}

      // 使用這種??! 證明已經(jīng)是最后一頁了
      if(that.current = pages) {
        that.finished = true
        that.finishedText = '沒有更多了';
      }
    }
  })
  .catch(err=>{this.error = true; })
  .finally(()=>{this.loading = false })
},

// 上拉刷新
 onLoad() {
   this.current+=1
   this.createList(this.current,this.size)
 },
}

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 用vue構建多頁面應用的示例代碼

    用vue構建多頁面應用的示例代碼

    這篇文章主要介紹了用vue構建多頁面應用的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 解決vue select當前value沒有更新到vue對象屬性的問題

    解決vue select當前value沒有更新到vue對象屬性的問題

    今天小編就為大家分享一篇解決vue select當前value沒有更新到vue對象屬性的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • VUE+Element-ui實戰(zhàn)之使用el-calendar日歷自定義顯示內容

    VUE+Element-ui實戰(zhàn)之使用el-calendar日歷自定義顯示內容

    這篇文章主要介紹了VUE+Element-ui實戰(zhàn)之使用el-calendar日歷自定義顯示內容方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 解析vue.js中常用v-指令

    解析vue.js中常用v-指令

    本文以click為例給大家介紹vue.js中常用v-指令,可以用 v-on 指令監(jiān)聽 DOM 事件,并在觸發(fā)時運行一些 JavaScript代碼,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • vue3使用自定義指令實現(xiàn)el dialog拖拽功能示例詳解

    vue3使用自定義指令實現(xiàn)el dialog拖拽功能示例詳解

    這篇文章主要為大家介紹了vue3使用自定義指令實現(xiàn)el dialog拖拽功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 淺談Vue.js 關于頁面加載完成后執(zhí)行一個方法的問題

    淺談Vue.js 關于頁面加載完成后執(zhí)行一個方法的問題

    這篇文章主要介紹了Vue.js 關于頁面加載完成后執(zhí)行一個方法的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • vuex狀態(tài)管理淺談之mapState用法

    vuex狀態(tài)管理淺談之mapState用法

    當一個組件需要獲取多個狀態(tài)的時候,將這些狀態(tài)都聲明為計算屬性會有些重復和冗余,為了解決這個問題我們可以使用mapState輔助函數(shù)幫助我們生成計算屬性,這篇文章主要給大家介紹了關于vuex狀態(tài)管理之mapState用法的相關資料,需要的朋友可以參考下
    2023-12-12
  • vue 粒子特效的示例代碼

    vue 粒子特效的示例代碼

    本篇文章主要介紹了vue 粒子特效的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue.js-div滾動條隱藏但有滾動效果的實現(xiàn)方法

    vue.js-div滾動條隱藏但有滾動效果的實現(xiàn)方法

    下面小編就為大家分享一篇vue.js-div滾動條隱藏但有滾動效果的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue使用v-viewer實現(xiàn)圖片預覽

    Vue使用v-viewer實現(xiàn)圖片預覽

    這篇文章主要為大家詳細介紹了Vue使用v-viewer實現(xiàn)圖片預覽,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評論