vant-List-@load事件一直觸發(fā)的解決
vant-List-@load事件一直觸發(fā)
項(xiàng)目場(chǎng)景
今天項(xiàng)目用到vant-List,發(fā)現(xiàn)一直觸發(fā)@load事件。
這是請(qǐng)求的page和pageSize
page: 0, pageSize: 10,
后端測(cè)試數(shù)據(jù)一共21條,但是進(jìn)入頁面就一下請(qǐng)求了三次,全部加載完數(shù)據(jù)了,這樣就達(dá)不到要求了。
問題描述
查看了文檔底下的常見問題:
為什么會(huì)連續(xù)觸發(fā) load 事件?
如果一次請(qǐng)求加載的數(shù)據(jù)條數(shù)較少,導(dǎo)致列表內(nèi)容無法鋪滿當(dāng)前屏幕,List 會(huì)繼續(xù)觸發(fā) load 事件,直到內(nèi)容鋪滿屏幕或數(shù)據(jù)全部加載完成。因此你需要調(diào)整每次獲取的數(shù)據(jù)條數(shù),理想情況下每次請(qǐng)求獲取的數(shù)據(jù)條數(shù)應(yīng)能夠填滿一屏高度。
看到這個(gè)時(shí)候我查看了一下代碼,10條的數(shù)據(jù)量是能夠填滿一屏的,但是還是直接請(qǐng)求完成了。
往下走:
在 html、body 上設(shè)置 overflow 后一直觸發(fā)加載?
如果在 html 和 body 標(biāo)簽上設(shè)置了overflow-x: hidden樣式,會(huì)導(dǎo)致 List 一直觸發(fā)加載。
html, body { overflow-x: hidden; }
這個(gè)問題的原因是當(dāng)元素設(shè)置了overflow-x: hidden樣式時(shí),該元素的overflow-y會(huì)被瀏覽器設(shè)置為auto,而不是默認(rèn)值visible,導(dǎo)致 List 無法正確地判斷滾動(dòng)容器。
解決方法是去除該樣式,或者在 html 和 body 標(biāo)簽上添加height: 100%樣式。
原因分析
到這里就找到問題的原因了,我習(xí)慣在外層盒子加上min-height: 100vh;overflow-x:hidden;沒想到會(huì)影響這個(gè)組件,麻了。
解決方案
去除overflow-x: hidden;或?qū)in-height: 100vh;改為height: 100vh;
vant-list onLoad觸發(fā)以及tab切換不再觸發(fā)問題
首先 van-list 是首次進(jìn)就會(huì)觸發(fā)加載的,滾動(dòng)條滑倒底部不會(huì)再觸發(fā) 一般是因?yàn)橥獠扛叨任垂潭▽?dǎo)致拿不到滾動(dòng)條位置
<template> ? ? <div class="listClass" ref="listout"> ? ? ? ? <van-list v-model="loading" :finished="finished" finished-text="沒有更多了" @load="onLoad"> ? ? ? ? ? ? <div v-for="(item, index) in list" :key="index">{{item}}</div> ? ? ? ? </van-list> ? ? </div> </template> <script> export default { ? ? data() { ? ? ? ? return { ? ? ? ? ? ? // 初始化定義 ? ? ? ? ? ? loading: true, ? ? ? ? ? ? finished: false, ? ? ? ? ? ? searchData: { ? ? ? ? ? ? ? ? pageSize: 10, ? ? ? ? ? ? ? ? pageNo: 0 ? ? ? ? ? ? }, ? ? ? ? ? ? list: [] ? ? ? ? } ? ? }, ? ? methods: { ? ? ? ? onLoad(){ ? ? ? ? ? ? this.searchData.pageNo += 1 ? ? ? ? ? ? this.obtainList() ? ? ? ? }, ? ? ? ? // 列表 ? ? ? ? obtainList () { ? ? ? ? ? ? // 調(diào)用列表接口(此為演示) ? ? ? ? ? ? findList(this.searchData).then(res => { ? ? ? ? ? ? ? ? if (res.data.data && res.data.errcode == 0) { ? ? ? ? ? ? ? ? ? ? if(this.searchData.pageNo == 1){ ? ? ? ? ? ? ? ? ? ? ? ? this.list = [] ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? res.data.data.result.forEach((v) => { ? ? ? ? ? ? ? ? ? ? ? ? this.list.push(v) ? ? ? ? ? ? ? ? ? ? }) ? ? ? ? ? ? ? ? ? ? this.loading = false ? ? ? ? ? ? ? ? ? ? if(this.searchData.pageNo >= res.data.data.totalPage) { ? ? ? ? ? ? ? ? ? ? ? ? this.finished = true ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? }) ? ? ? ? } ? ? } } </script> <style scoped> .listClass { ? ? width: 100%; ? ? height: 100vh; ? ? overflow-y: auto; } </style>
tab 切換的時(shí)候 需要重置下loading和finished狀態(tài)
? ? // 切換 ? ? activeClick (type) { ? ? ? this.searchData.active = type ? ? ? this.searchData.pageNo = 0 ? ? ? this.$refs.listout.scrollTop = 0 ? ? ? this.loading = true ? ? ? this.finished = false ? ? ? this.onLoad() ? ? }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue使用@include或@mixin報(bào)錯(cuò)的問題及解決
這篇文章主要介紹了vue使用@include或@mixin報(bào)錯(cuò)的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02el-table點(diǎn)擊某一行高亮并顯示小圓點(diǎn)的實(shí)現(xiàn)代碼
這篇文章主要介紹了el-table點(diǎn)擊某一行高亮并顯示小圓點(diǎn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08Vue router-view和router-link的實(shí)現(xiàn)原理
這篇文章主要介紹了Vue router-view和router-link的實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03詳解項(xiàng)目升級(jí)到vue-cli3的正確姿勢(shì)
這篇文章主要介紹了詳解項(xiàng)目升級(jí)到vue-cli3的正確姿勢(shì),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01Vue生產(chǎn)環(huán)境調(diào)試的方法步驟
開發(fā)環(huán)境下Vue會(huì)提供很多警告來幫你對(duì)付常見的錯(cuò)誤與陷阱,而在生產(chǎn)環(huán)境下,這些警告語句卻沒有用,反而會(huì)增加應(yīng)用的體積,下面這篇文章主要給大家介紹了關(guān)于Vue生產(chǎn)環(huán)境調(diào)試的方法步驟,需要的朋友可以參考下2022-04-04關(guān)于vue 的slot分發(fā)內(nèi)容 (多個(gè)分發(fā))
這篇文章主要介紹了關(guān)于vue 的slot分發(fā)內(nèi)容 (多個(gè)分發(fā)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03