vant van-list下拉加載更多onload事件問題
vant van-list下拉加載更多onload事件
問題描述
van-list編寫下拉加載更多,利用van-list自帶的下拉加載事件@load="onLoad",但是發(fā)現(xiàn)有次數(shù)限制,仍有部分條件下無法下拉加載更多。
后來發(fā)現(xiàn)原因,執(zhí)行完,之后finished恢復false,同時將當前頁恢復為1,不寫的話,代碼不會自己恢復,因為這些參數(shù)是全局變量,所以會保留最后執(zhí)行之后的結果。
所以,在代碼執(zhí)行前要做一個恢復。細節(jié)很重要,因為這個細節(jié),耽誤了很久時間。
this.currentPage = 1; //每次走完函數(shù),將當前頁恢復至1,防止后面累加,導致點擊別的篩選條件時無效,返回finished-text this.finished = false; //同樣,也要將finished恢復,否則,執(zhí)行別的篩選條件時,會顯示finished-text,并且導致明明還有數(shù)據(jù),但是不會加載出來.
主要代碼如下
<van-list v-model="loading" :finished="finished" finished-text="我是有底線的~" @load="onLoad">//list自帶的下拉刷新事件 <van-row v-for="(item,key) of Array" :key="key" </van-row>//循環(huán),顯示列表 </van-list>
selType(type) {//從前端的點擊事件獲得type
this.selectedType = type;
console.log(this.selectedType);
this.currentPage = 1;
//每次走完函數(shù),將當前頁恢復至1,防止后面累加,導致點擊別的篩選條件時無效,返回finished-text
this.finished = false;
//同樣,也要將finished恢復,否則,執(zhí)行別的篩選條件時,會顯示finished-text,并且導致明明還有數(shù)據(jù),但是不會加載出來.
this.onLoad();
},
onLoad(){
this.search();
}
search() {//調用查詢的接口
let params = {
type: this.selectedType,
index: this.currentPage,//頁數(shù)
size: this.pageSize,//每頁個數(shù)
}
.....(接口)(params).then(res => {
console.log(res);
this.dataTotal = res.total;
//進行判斷
if(this.dataTotal <= this.pageSize){
this.Array = res.data.list;
console.log(this.Array);
}else{
this.currentPage++;
let arr = res.data.data.list;
this.Array = this.Array.concat(arr);
};
// 加載狀態(tài)結束
this.loading = false;
// 數(shù)據(jù)全部加載完成
if (this.Array.length >= this.dataTotal) {
this.finished = true;//結束,顯示我也是有底線的
};
});
}
vant van-list的使用及一些坑的解決
第一步
要使用vant組件,安裝好vant,npm i vant -S
第二步
在你要用到的地方js中引入,或者在src/main.js里面引入
import Vue from ‘vue‘;
import { List } from ‘vant‘;
Vue.use(List);
這里我引入的地方是我要用到的js文件中

第三步
在template中引用

第四步
js中重要代碼
data(){
return{
content_list: [],
loading: false,//加載狀態(tài)
finished: false,//是否加載
count_page: 1,//加載頁數(shù)
count_num: 4//每頁限制條數(shù)
}
},
methods:{
list_onload_more: function () {
var _this = this;
_this.count_page += 1;
// 請求數(shù)據(jù)
_this.get_course_list();
}
,get_course_list:function(){
var _this = this;
var params ={};
params.page = _this.count_page;
params.num = _this.count_num;
index_rpc.get_collection_course(params,function (data) {
if(data.error_code == 0) {
var item = data.data || [];
_this.count = data.count;
if (params.count_page == 1){
_this.content_list = [];
}
item.forEach(function(val) {
_this.content_list.push(val);
})
//這里是用于判斷什么時候所有數(shù)據(jù)加載完畢,然后進行是否進行加載關閉
if(_this.count_num * _this.count_page >= _this.count) {
_this.finished = true;
}else {
_this.finished = false;
}
}else{
_this.count = 0;
_this.content_list = [];
_this.finished = true;
}
//最后數(shù)據(jù)加載完后不要忘記將loading改為false
_this.loading = false;
})
}
}
兩個事情跳轉:


第五步
解決遇到的坑
這里我講一下我遇到的一些關于該組件的問題解決方法。
首先, onload在加載時只觸發(fā)一次,頁面向下滾動時,onload并不加載,你可以在獲取數(shù)據(jù)的時候手動在前面加一個_this.loading = false。
其次,如果數(shù)據(jù)一次全加載完了,說明你表格渲染的高度沒有固定,或者是高度被撐開了,所以才會導致數(shù)據(jù)會一次加載完畢。設置100%也無效,這時你要設置高度。
然后如果一直顯示加載中,無法關閉,這時你要在獲取數(shù)據(jù)里面做一個判斷,判斷數(shù)據(jù)是否已經(jīng)全部獲取,獲取了就給_this.finished = true,即關閉加載。
最后,就是css樣式問題,列表元素使用了float需要使用類名vant-clearfix清除float,否則會出現(xiàn)請求被多次觸發(fā)的問題。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue解決echart在element的tab切換時顯示不正確問題
這篇文章主要介紹了Vue解決echart在element的tab切換時顯示不正確問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

