Vue移動端下拉加載更多數(shù)據(jù)onload實現(xiàn)方法淺析
思想:van-list組件負(fù)責(zé)UI層監(jiān)測觸底, 執(zhí)行onload函數(shù), page++, 請求下頁數(shù)據(jù), 和現(xiàn)在數(shù)據(jù)合并顯示更多, 設(shè)置loading為false, 確保下次觸底還能執(zhí)行onLoad
vant是一個可用于移動端的組件庫,搭建頁面框架,需要使用到vant組件,添加依賴yarn add vant@2.12.15至vue2項目內(nèi),此處用到van-list組件。
vant中的組件van-list來動態(tài)渲染數(shù)據(jù),下拉加載首先需要綁定變量loading(加載狀態(tài))、屬性finished(是否全部加載完成),finished-text全部加載完成顯示的文字
<van-list
v-model="loading"
:finished="finished"
finished-text="沒有更多了"
@load="onLoad"
>
正常的遍歷searchResult內(nèi)數(shù)據(jù) 渲染至頁面內(nèi)容
</van-list> 數(shù)據(jù):注意要有當(dāng)前頁頁碼page配合實現(xiàn)
data() {
return {
searchResult: [], //搜索到的總的數(shù)據(jù),用此數(shù)組內(nèi)數(shù)據(jù)來遍歷展示
loading: false, //加載中 (狀態(tài)) - 只有為false, 才能觸底后自動觸發(fā)onload方法
finished: false, // 未加載全部 (如果設(shè)置為true, 底部就不會再次執(zhí)行onload, 代表全部加載完成)
page: 1, // 當(dāng)前搜索結(jié)果的頁碼
};
}, 以上為準(zhǔn)備的數(shù)據(jù),
onload 下拉刷新加載更多數(shù)據(jù) (觸底后加載下一頁數(shù)據(jù))
思想:
1、監(jiān)測頁面觸底執(zhí)行onload事件 (onload事件:頁面內(nèi)所有元素包括圖片等都加載完成后執(zhí)行)
2、配合后臺接口,傳遞下一頁的標(biāo)識
3、拿到下一頁數(shù)據(jù)后追加到當(dāng)前數(shù)組末尾即可
<script>
export default {
methods: {
// 此為js代碼,監(jiān)聽事件,發(fā)送異步操作的數(shù)據(jù)請求
async btn2() {
this.loading = false // 優(yōu)化bug,防止出現(xiàn)首次多加載一次的情況
this.finished = false // 加載未結(jié)束
this.page = 1 // 走完函數(shù),就將當(dāng)前頁恢復(fù)至1,防止后面累加,導(dǎo)致點擊別的篩選條件時無效
// 異步發(fā)送請求獲取數(shù)據(jù)賦值給data內(nèi)變量
const { data } = await getSearchResult({
keywords: this.value, // 此為接口需要的參數(shù)
limit: 20
})
this.searchResult = data.result.songs
},
async onLoad() { // 觸底事件(要加載下一頁的數(shù)據(jù)), 內(nèi)部會自動把loading改為true,為true后才會執(zhí)行x
this.page++ // 加載至底部就將頁面值+1
const { data } = await getSearchResult({
keywords: this.value,
limit: 20,
offset: (this.page - 1) * 20 // 傳參固定公式,頁面偏移量即一頁多少數(shù)據(jù)
})
if (data.result.songs === undefined) { // 下拉刷新后此次檢索不到數(shù)據(jù)了,表示已經(jīng)將所有數(shù)據(jù)加載完了
return (this.finished = true) // finished賦值為true,表示 不再去進行加載了,結(jié)束狀態(tài)
}
this.searchResult.push(...data.result.songs) // 將每次下拉刷新檢索到的數(shù)據(jù)加入 展示的數(shù)據(jù)列表
this.loading = false // 切記,本次加載完更多數(shù)據(jù)后,一定要把loading改成false, 保證下一次還能觸發(fā)onload方法
}
}
}
</script>
第一次發(fā)送getSearchResult數(shù)據(jù)請求為加載第一頁數(shù)據(jù),限制獲取數(shù)據(jù)數(shù)量limit為20條,第二次getSearchResult則是下拉到底,再去獲取20條數(shù)據(jù),再添加到第一次保存數(shù)據(jù)的數(shù)組里,這樣就有40條數(shù)據(jù)同時渲染在了頁面上,以后每下拉一次,就是此種操作,從請求里獲取不到數(shù)據(jù)了,將finished賦值為true下拉加載事件就會停止
到此這篇關(guān)于Vue移動端下拉加載更多數(shù)據(jù)onload實現(xiàn)方法淺析的文章就介紹到這了,更多相關(guān)Vue下拉加載 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入探索VueJS Scoped CSS 實現(xiàn)原理
這篇文章主要介紹了深入探索VueJS Scoped CSS 實現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
如何用Vite構(gòu)建工具快速創(chuàng)建Vue項目
Vite是一個web開發(fā)構(gòu)建工具,由于其原生?ES?模塊導(dǎo)入方法,它允許快速提供代碼,下面這篇文章主要給大家介紹了關(guān)于如何用Vite構(gòu)建工具快速創(chuàng)建Vue項目的相關(guān)資料,需要的朋友可以參考下2022-05-05
Vue3+Vue Router實現(xiàn)動態(tài)路由導(dǎo)航的示例代碼
隨著單頁面應(yīng)用程序(SPA)的日益流行,前端開發(fā)逐漸向復(fù)雜且交互性強的方向發(fā)展,在這個過程中,Vue.js及其生態(tài)圈的工具(如Vue Router)為我們提供了強大的支持,本文將介紹如何在Vue 3中使用Vue Router實現(xiàn)動態(tài)路由導(dǎo)航,需要的朋友可以參考下2024-08-08

