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结合css实现网页换肤功能
Nov 02 Javascript
Javascript Cookie读写删除操作的函数
Mar 02 Javascript
javascript之通用简单的table选项卡实现(二)
May 09 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
Apr 15 Javascript
javascript实现限制上传文件大小
Feb 06 Javascript
javascript实现移动端上的触屏拖拽功能
Mar 04 Javascript
JavaScript面试题大全(推荐)
Sep 22 Javascript
原生js二级联动效果
Jun 20 Javascript
postman+json+springmvc测试批量添加实例
Mar 31 Javascript
vue.js 实现输入框动态添加功能
Jun 25 Javascript
es6 symbol的实现方法示例
Apr 02 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
Feb 12 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
linux下 C语言对 php 扩展
2008/12/14 PHP
php提示undefined index的几种解决方法
2012/05/21 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
JavaScript 创建对象
2009/07/17 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
Vue渲染函数详解
2017/09/15 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
python pytest进阶之fixture详解
2019/06/27 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
python 基于selenium实现鼠标拖拽功能
2020/12/24 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
旅游专业职业生涯规划范文
2014/01/13 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
家长会标语
2014/06/24 职场文书
技术经济专业求职信
2014/09/03 职场文书
婚宴邀请函
2015/01/30 职场文书
业务员岗位职责范本
2015/04/03 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书