vant-ui框架的一个bug(解决切换后onload不触发)


Posted in Javascript onNovember 11, 2020

前几天做的项目里有用到下拉刷新。使用了vant-ui里的

List 列表

瀑布流滚动加载,用于控制长列表的展示

先说使用

1.用npm下载该模块包

npm i vant -S

2.引入组件

官方提供了三种方法。(我使用了第三种,全局引入方法)

方式一. 使用 babel-plugin-import (推荐)

babel-plugin-import 是一款 babel 插件,它会在编译过程中将 import 的写法自动转换为按需引入的方式

# 安装 babel-plugin-import 插件
npm i babel-plugin-import -D
// .babelrc 中配置
// 注意:webpack 1 无需设置 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 组件,插件会自动将代码转化为方式二中的按需引入形式

import { Button, Cell } from 'vant';

如果你在使用 TypeScript,可以使用 ts-import-plugin 实现按需引入

方式二. 按需引入组件

在不使用插件的情况下,可以手动引入需要的组件

import Button from 'vant/lib/button';

import 'vant/lib/button/style';

方式三. 导入所有组件(在main.js中引入)

import Vue from 'vue';
import Vant from 'vant';
import 'vant/lib/index.css'; 
Vue.use(Vant);

注意:配置 babel-plugin-import 插件后将不允许导入所有组件

引入成功后使用

<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>暂无预约~</div>
  </div>

loading为false是加载中,finished为true是已结束状态,onLoad是执行函数(分页添加list的值),里面的v-bookOrder是自己写的组件。

初始化loading为false,finished为false。

vant-ui框架的一个bug(解决切换后onload不触发)

一切ok。

但项目里,加载的list,页面上有个切换的tab,实现切换不同的类型,加载不同的list的功能。vant-ui的list就有个bug,当切换tab的时候,它的onload没方法自动触发。然而在当前标签页,如果列表已经加载完毕再去切换,onload就可以实现自动触发。(很多人给官方提这个问题,但是官方就是不修改)。

vant-ui框架的一个bug(解决切换后onload不触发)

下面给出解决方案。

在切换tab后执行初始化函数

initialization(){
   this.list = [];
   this.page = 1;
   this.loading = true;//下拉加载中
   this.finished = false;//下拉结束
   if(this.loading){
    this.onLoad();
   }
  },

list清空,page=1表示第一页,将loading设置为true,一定触发一次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设置为false,则触发第二次loading,当执行到满足结束条件的时候,finished为true,结束加载。bug就解决啦~

补充知识:vant 框架van-list重复触发加载函数的问题

在使用van-list组件的时候,为了隐藏ios手机右侧的滚动条,我给了组件一个overflow-x:hidden属性,官方说这个属性会导致重复触发van-list的加载,

但是我去掉这个属性仍然不管用,而且这个属性又是必须保留的,最后我又给了他一个固定的高度,就不会重复触发加载了,注意一定要是固定的高度,

设置height:100%仍然是不管用的,记录一下这个问题。

以上这篇vant-ui框架的一个bug(解决切换后onload不触发)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript Select操作大集合
May 26 Javascript
让IE6支持min-width和max-width的方法
Jun 25 Javascript
Jquery中CSS选择器用法分析
Feb 10 Javascript
jQuery实现当前页面标签高亮显示的方法
Mar 10 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
Jun 11 Javascript
angular2使用简单介绍
Mar 01 Javascript
纯js实现手风琴效果代码
Apr 17 Javascript
Javascript中关于Array.filter()的妙用详解
Dec 04 Javascript
vue登录页面cookie的使用及页面跳转代码
Jul 10 Javascript
微信小程序解析富文本过程详解
Jul 13 Javascript
简单了解JavaScript arguement原理及作用
May 28 Javascript
VueJS实现用户管理系统
May 29 Javascript
使用Vant完成Dialog弹框案例
Nov 11 #Javascript
vue实现lodop打印功能的示例
Nov 11 #Javascript
解决vant的Toast组件时提示not defined的问题
Nov 11 #Javascript
vue mvvm数据响应实现
Nov 11 #Javascript
Js数组扁平化实现方法代码总汇
Nov 11 #Javascript
使用Vant完成通知栏Notify的提示操作
Nov 11 #Javascript
Vue3 响应式侦听与计算的实现
Nov 11 #Javascript
You might like
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
php微信公众号开发之简答题
2018/10/20 PHP
js 分栏效果实现代码
2009/08/29 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
python导入时小括号大作用
2017/01/10 Python
python 接收处理外带的参数方法
2018/12/03 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
中专三年学习的个人自我评价
2013/12/12 职场文书
高级编程求职信模板
2014/02/16 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
内乡县衙导游词
2015/02/05 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS