Vue3+vant+ts 上滑加載解決上滑調(diào)用多次數(shù)據(jù)的問(wèn)題(推薦)
之前用vue2的時(shí)候,寫(xiě)過(guò)vue2的用法,文末擴(kuò)展知識(shí)點(diǎn)擊查看,用得挺好的,也沒(méi)啥問(wèn)題,照葫蘆畫(huà)瓢的做出來(lái)了,但是有問(wèn)題,下滑之后調(diào)用多次數(shù)據(jù),按理說(shuō)
組件通過(guò) loading 和 finished 這倆變量控制加載狀態(tài),當(dāng)組件滾動(dòng)到底部時(shí),會(huì)觸發(fā) load 事件并將 loading 設(shè)置成 true。此時(shí)可以發(fā)起異步操作并更新數(shù)據(jù),數(shù)據(jù)更新完畢后,將 loading 設(shè)置成 false 即可。若數(shù)據(jù)已全部加載完畢,則直接將 finished 設(shè)置成 true 即可。
但是我打印了一下,在調(diào)用方法的時(shí)候沒(méi)有把loading設(shè)置為true,還是false,后來(lái)才發(fā)現(xiàn),和vue2還是有區(qū)別的,不能直接用v-model,得用v-model:loading,還是得看手冊(cè)啊,不能老看之前做的項(xiàng)目
具體代碼如下:
頁(yè)面:<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, //頁(yè)碼
? ? ? pageSize: 20, //每頁(yè)條數(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 ++;? ?//頁(yè)數(shù)+1
loading.value = false;? // 加載狀態(tài)結(jié)束
? ? ? ? ? ? ? ? ? ? state.proList = state.proList.concat(res.data);
? ? ? ? ? ? ? ? ? ? //判斷是否是最后一頁(yè)
? ? ? ? ? ? ? ? ? ? if (res.data.length < state.pageSize) {
? ? ? ? ? ? ? ? ? ? ? ? finished.value = true ;
? ? ? ? ? ? ? ? ? ? ? ? state.nodata = "已經(jīng)到底了";
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? if (state.proList.length == 0) {
? ? ? ? ? ? ? ? ? ? ? ? finished.value = true;
? ? ? ? ? ? ? ? ? ? ? ? state.nodata = "暫無(wú)數(shù)據(jù)";
? ? ? ? ? ? ? ? ? ? }?
? ? ? ? ? }
? ? })
}?
</script>擴(kuò)展知識(shí)點(diǎn):
Vue插件—vant當(dāng)中van-list的使用
先看官網(wǎng) 點(diǎn)這里
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="沒(méi)有更多啦"
@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,//頁(yè)數(shù)
limit: 15//條數(shù)
}
},
methods:{
load_more: function() {
this.page += 1;//頁(yè)數(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,因?yàn)榛瑒?dòng)加載,看你滑動(dòng)的是不是當(dāng)前模塊,如果滑動(dòng)的不是當(dāng)前的模塊,是父元素或者其他的元素,不會(huì)觸發(fā)加載事件,也不會(huì)請(qǐng)求數(shù)據(jù)
到此這篇關(guān)于Vue3+vant+ts 上滑加載解決上滑調(diào)用多次數(shù)據(jù)的問(wèn)題的文章就介紹到這了,更多相關(guān)Vue3 vant ts 上滑加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vant的Loading加載動(dòng)畫(huà)組件的使用(通過(guò)接口拿數(shù)據(jù)時(shí)顯示加載狀態(tài))
- vant-list組件觸發(fā)多次onload事件導(dǎo)致數(shù)據(jù)亂序的解決方案
- vant的Uploader?文件上傳,圖片數(shù)據(jù)回顯問(wèn)題
- 使用Vant如何實(shí)現(xiàn)數(shù)據(jù)分頁(yè),下拉加載
- vant遇到van-sidebar數(shù)據(jù)超出不能滑動(dòng)的問(wèn)題
- vant中的Cascader級(jí)聯(lián)選擇異步加載地區(qū)數(shù)據(jù)方式
相關(guān)文章
Vue創(chuàng)建淺層響應(yīng)式數(shù)據(jù)的實(shí)例詳解
這篇文章主要介紹了Vue創(chuàng)建淺層響應(yīng)式數(shù)據(jù)的實(shí)例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
vue 行為驗(yàn)證碼之滑動(dòng)驗(yàn)證AJ-Captcha使用詳解
這篇文章主要介紹了vue 行為驗(yàn)證碼之滑動(dòng)驗(yàn)證AJ-Captcha使用詳解,AJ-Captcha不需要npm安裝,只需要將組件 verifition復(fù)制到所使用的components目錄下,本文給大家詳細(xì)講解,需要的朋友可以參考下2023-05-05
詳解Vue SPA項(xiàng)目?jī)?yōu)化小記
這篇文章主要介紹了詳解Vue SPA項(xiàng)目?jī)?yōu)化小記,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
詳解基于iview-ui的導(dǎo)航欄路徑(面包屑)配置
這篇文章主要介紹了詳解基于iview-ui的導(dǎo)航欄路徑(面包屑)配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Vue項(xiàng)目中對(duì)index.html中BASE_URL的配置方式
這篇文章主要介紹了Vue項(xiàng)目中對(duì)index.html中BASE_URL的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
使用vue3實(shí)現(xiàn)簡(jiǎn)單的滑塊組件
這篇文章主要給大家介紹一下如何使用vue3實(shí)現(xiàn)簡(jiǎn)單的滑塊組件,文中有詳細(xì)的代碼示例講解,具有一定的參考價(jià)值,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-08-08

