Vue3+vant+ts 上滑加載解決上滑調(diào)用多次數(shù)據(jù)的問題(推薦)
之前用vue2的時候,寫過vue2的用法,文末擴(kuò)展知識點擊查看,用得挺好的,也沒啥問題,照葫蘆畫瓢的做出來了,但是有問題,下滑之后調(diào)用多次數(shù)據(jù),按理說
組件通過 loading
和 finished
這倆變量控制加載狀態(tài),當(dāng)組件滾動到底部時,會觸發(fā) load
事件并將 loading
設(shè)置成 true
。此時可以發(fā)起異步操作并更新數(shù)據(jù),數(shù)據(jù)更新完畢后,將 loading
設(shè)置成 false
即可。若數(shù)據(jù)已全部加載完畢,則直接將 finished
設(shè)置成 true
即可。
但是我打印了一下,在調(diào)用方法的時候沒有把loading設(shè)置為true,還是false,后來才發(fā)現(xiàn),和vue2還是有區(qū)別的,不能直接用v-model,得用v-model:loading,還是得看手冊啊,不能老看之前做的項目
具體代碼如下:
頁面:<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: [], //產(chǎn)品列表數(shù)據(jù)? ? ? ? nodata: "",? ? ? ? page: 1, //頁碼 ? ? ? pageSize: 20, //每頁條數(shù) }) ? ?//獲取數(shù)據(jù) const getList = ()=>{ ? ?? ? ? let params = { ? ? ? ? pageNo:state.page, ? ? ? ? pageSize:state.pageSize ? ? }; ? ? axios.getdata(params).then((res:any) => { ? ? ? ? if (res.code == 200) { state.page ++;? ?//頁數(shù)+1 loading.value = false;? // 加載狀態(tài)結(jié)束 ? ? ? ? ? ? ? ? ? ? state.proList = state.proList.concat(res.data); ? ? ? ? ? ? ? ? ? ? //判斷是否是最后一頁 ? ? ? ? ? ? ? ? ? ? if (res.data.length < state.pageSize) { ? ? ? ? ? ? ? ? ? ? ? ? finished.value = true ; ? ? ? ? ? ? ? ? ? ? ? ? state.nodata = "已經(jīng)到底了"; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (state.proList.length == 0) { ? ? ? ? ? ? ? ? ? ? ? ? finished.value = true; ? ? ? ? ? ? ? ? ? ? ? ? state.nodata = "暫無數(shù)據(jù)"; ? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? } ? ? }) }? </script>
擴(kuò)展知識點:
Vue插件—vant當(dāng)中van-list的使用
先看官網(wǎng) 點這里
1、安裝
npm i vant -S
2、引入 在src/main.js里面引入
import Vue from 'vue'; import { List } from 'vant'; Vue.use(List);
3、使用 teamplate
//van-list 是必須帶的標(biāo)簽,里面的標(biāo)簽可以自己加 <van-list v-model="loading" :finished="finished" finished-text="沒有更多啦" @load="load_more" class="publist" > <li v-for="(item,ing) of list" :key="ing">{{item.name}}</li> </van-list>
script
export default { name: 'Home', data(){ return{ list: [], loading: false,//加載狀態(tài) finished: false,//是否加載 page: 1,//頁數(shù) limit: 15//條數(shù) } }, methods:{ load_more: function() { this.page += 1;//頁數(shù)+1 this.onLoad(); }, onLoad() { let data = { page: this.page, pageSize: this.limit } axios.post('api/test/xbxxf',data) .then(res => { if(res.data.code=200){ // 加載狀態(tài)結(jié)束 this.loading = false; this.list = this.list.concat(res.data.data.list);//追加數(shù)據(jù) if (res.data.data.page == res.data.data.pageNum || res.data.data.list.length == 0) { //數(shù)據(jù)全部加載完成 this.finished = true; }else{ this.finished = false; } } }) } } }
另外注意css,因為滑動加載,看你滑動的是不是當(dāng)前模塊,如果滑動的不是當(dāng)前的模塊,是父元素或者其他的元素,不會觸發(fā)加載事件,也不會請求數(shù)據(jù)
到此這篇關(guān)于Vue3+vant+ts 上滑加載解決上滑調(diào)用多次數(shù)據(jù)的問題的文章就介紹到這了,更多相關(guān)Vue3 vant ts 上滑加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue創(chuàng)建淺層響應(yīng)式數(shù)據(jù)的實例詳解
這篇文章主要介紹了Vue創(chuàng)建淺層響應(yīng)式數(shù)據(jù)的實例,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11詳解基于iview-ui的導(dǎo)航欄路徑(面包屑)配置
這篇文章主要介紹了詳解基于iview-ui的導(dǎo)航欄路徑(面包屑)配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02Vue項目中對index.html中BASE_URL的配置方式
這篇文章主要介紹了Vue項目中對index.html中BASE_URL的配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06