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 相关文章推荐
JS获取整个页面文档的实现代码
Dec 15 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 Javascript
js里取容器大小、定位、距离等属性搜集整理
Aug 19 Javascript
jQuery实现带渐显效果的人物多级关系图代码
Oct 16 Javascript
jQuery侧边栏实现代码
May 06 Javascript
详解Angular2中的编程对象Observable
Sep 17 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
Dec 20 Javascript
自定义vue全局组件use使用、vuex的使用详解
Jun 14 Javascript
vue与bootstrap实现简单用户信息添加删除功能
Feb 15 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
jquery实现直播弹幕效果
Nov 28 jQuery
Echarts如何重新渲染实例详解
May 30 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
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
在Python中marshal对象序列化的相关知识
2015/07/01 Python
python下10个简单实例代码
2017/11/15 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
python简易远程控制单线程版
2018/06/20 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
国际经济贸易专业推荐信
2013/11/06 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript