Vue3+vant+ts 上滑加載,解決上滑調用多次數據的問題

之前用vue2的時候,寫過vue2的用法,鏈接在這裏點擊跳轉哈,用得挺好的,也沒啥問題,照葫蘆畫瓢的做出來了,但是有問題,下滑之後調用多次數據,按理說

組件通過 loading 和 finished 這倆變量控制加載狀態,當組件滾動到底部時,會觸發 load 事件並將 loading 設置成 true。此時可以發起異步操作並更新數據,數據更新完畢後,將 loading 設置成 false 即可。若數據已全部加載完畢,則直接將 finished 設置成 true 即可。

但是我打印了一下,在調用方法的時候沒有把loading設置爲true,還是false,後來才發現,和vue2還是有區別的,不能直接用v-model,得用v-model:loading,還是得看手冊啊,不能老看之前做的項目

具體代碼如下:

:immediate-check="false" 設置爲false,在onMounted裏面去調用數據
還有就是一進來加載兩次的問題,有時候可能是因爲在html,bodys設置了overflow:hidden,會多次請求數據
頁面:
<van-list v-model:loading="loading" :finished="finished" :finished-text="nodata" :immediate-check="false" @load="getList" >
        <div 
                v-for="item in proList"
                :key="item.Id"
                >
        </div>
 </van-list>
<script lang="ts" setup>
onMounted(() => {
    getList();
})
const loading = ref(false);
const finished = ref(false);
const state = reactive<any>({ 
      proList: [], //產品列表數據 
      nodata: "", 
      page: 1, //頁碼
      pageSize: 20, //每頁條數
})
 
 //獲取數據
const getList = ()=>{
    
    let params = {
        pageNo:state.page,
        pageSize:state.pageSize
    };
    axios.getdata(params).then((res:any) => {
        if (res.code == 200) {
            state.page ++;   //頁數+1
            loading.value = false;  // 加載狀態結束
                    state.proList = state.proList.concat(res.data);
                    //判斷是否是最後一頁
                    if (res.data.length < state.pageSize) {
                        finished.value = true ;
                        state.nodata = "已經到底了";
                    }
                    if (state.proList.length == 0) {
                        finished.value = true;
                        state.nodata = "暫無數據";
                    } 
          }
    })
</script>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章