vant-ui框架的一個bug(解決切換后onload不觸發(fā))
前幾天做的項目里有用到下拉刷新。使用了vant-ui里的
瀑布流滾動加載,用于控制長列表的展示
先說使用
1.用npm下載該模塊包
npm i vant -S
2.引入組件
官方提供了三種方法。(我使用了第三種,全局引入方法)
方式一. 使用 babel-plugin-import (推薦)
babel-plugin-import 是一款 babel 插件,它會在編譯過程中將 import 的寫法自動轉(zhuǎn)換為按需引入的方式
# 安裝 babel-plugin-import 插件
npm i babel-plugin-import -D
// .babelrc 中配置
// 注意:webpack 1 無需設(shè)置 libraryDirectory
{
"plugins": [
["import", {
"libraryName": "vant",
"libraryDirectory": "es",
"style": true
}]
]
}
// 對于使用 babel7 的用戶,可以在 babel.config.js 中配置
module.exports = {
plugins: [
['import', {
libraryName: 'vant',
libraryDirectory: 'es',
style: true
}, 'vant']
]
};
接著你可以在代碼中直接引入 Vant 組件,插件會自動將代碼轉(zhuǎn)化為方式二中的按需引入形式
import { Button, Cell } from 'vant';
如果你在使用 TypeScript,可以使用 ts-import-plugin 實現(xiàn)按需引入
方式二. 按需引入組件
在不使用插件的情況下,可以手動引入需要的組件
import Button from 'vant/lib/button';
import 'vant/lib/button/style';
方式三. 導(dǎo)入所有組件(在main.js中引入)
import Vue from 'vue'; import Vant from 'vant'; import 'vant/lib/index.css'; Vue.use(Vant);
注意:配置 babel-plugin-import 插件后將不允許導(dǎo)入所有組件
引入成功后使用
<van-list
v-model="loading"
:finished="finished"
@load="onLoad">
<v-bookOrder
:list="list"
:type="type"
:idType="idType"
@reflush = "submitHandler">
</v-bookOrder>
</van-list>
<!-- //空頁面 -->
<div class="empty" v-if="list.length==0&&!loading">
<img src="../../assets/icon_kong_dingdan@2x.png"/>
<div>暫無預(yù)約~</div>
</div>
loading為false是加載中,finished為true是已結(jié)束狀態(tài),onLoad是執(zhí)行函數(shù)(分頁添加list的值),里面的v-bookOrder是自己寫的組件。
初始化loading為false,finished為false。

一切ok。
但項目里,加載的list,頁面上有個切換的tab,實現(xiàn)切換不同的類型,加載不同的list的功能。vant-ui的list就有個bug,當(dāng)切換tab的時候,它的onload沒方法自動觸發(fā)。然而在當(dāng)前標(biāo)簽頁,如果列表已經(jīng)加載完畢再去切換,onload就可以實現(xiàn)自動觸發(fā)。(很多人給官方提這個問題,但是官方就是不修改)。

下面給出解決方案。
在切換tab后執(zhí)行初始化函數(shù)
initialization(){
this.list = [];
this.page = 1;
this.loading = true;//下拉加載中
this.finished = false;//下拉結(jié)束
if(this.loading){
this.onLoad();
}
},
list清空,page=1表示第一頁,將loading設(shè)置為true,一定觸發(fā)一次onload,
onLoad() {
setTimeout(async () => {
let res = await this.$ajax.get({
limit:this.pageSize,
page:this.page,
keyword:this.value1
},'/order/businesslist/'+this.type,
res=>{
if(res.code==0){
this.list = this.list.concat(res.data.list)
this.loading = false;
if(this.list.length >= res.data.total){
this.finished = true;
}
this.page++;
}
else{
this.$dialog.toast({
mes: res.msg,
timeout: 1500
});
}},err=>{
this.$dialog.toast({
mes: "出錯了~",
timeout: 1500
});
})
}, 500);
},
在第一次onload的過程中將loading設(shè)置為false,則觸發(fā)第二次loading,當(dāng)執(zhí)行到滿足結(jié)束條件的時候,finished為true,結(jié)束加載。bug就解決啦~
補充知識:vant 框架van-list重復(fù)觸發(fā)加載函數(shù)的問題
在使用van-list組件的時候,為了隱藏ios手機右側(cè)的滾動條,我給了組件一個overflow-x:hidden屬性,官方說這個屬性會導(dǎo)致重復(fù)觸發(fā)van-list的加載,
但是我去掉這個屬性仍然不管用,而且這個屬性又是必須保留的,最后我又給了他一個固定的高度,就不會重復(fù)觸發(fā)加載了,注意一定要是固定的高度,
設(shè)置height:100%仍然是不管用的,記錄一下這個問題。
以上這篇vant-ui框架的一個bug(解決切換后onload不觸發(fā))就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue2?Element?description組件列合并詳解
在使用Vue的時候經(jīng)常會涉及到表格的列合并,下面這篇文章主要給大家介紹了給大家Vue2?Element?description組件列合并的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
vue + typescript + video.js實現(xiàn) 流媒體播放 視頻監(jiān)控功能
視頻才用流媒體,有后臺實時返回數(shù)據(jù), 要支持flash播放, 所以需安裝對應(yīng)的flash插件。這篇文章主要介紹了vue + typescript + video.js 流媒體播放 視頻監(jiān)控,需要的朋友可以參考下2019-07-07
Vue官方推薦AJAX組件axios.js使用方法詳解與API
axios是Vue官方推薦AJAX組件,下面為大家介紹axios.js庫的詳細(xì)使用方法與API介紹2018-10-10
VUE3+Element-plus中el-form的使用示例代碼
這篇文章主要介紹了VUE3+Element-plus中el-form的使用示例代碼,本文通過圖文示例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07

