vant-list使用,请求接口之后会多几次load加页面

46 篇文章 0 订阅
订阅专栏
14 篇文章 0 订阅
订阅专栏

vant-list标签中使用v-model="loading"还是:loading="loading"是有区别的.v-model是双向的内部会处理保定的loading值。注意下文代码用的是第二种

页面实现效果:在页面中使用了van-tabs组件和van-list组件来实现页面布局和功能。

问题描述:在第一个标签下,向下滚动page超过了2页之后,有点击tab切换标签,接口调用了多回。

解决问题关键:

  1. loading和finished在什么时候设置false和true值

  1. 要关注van-list包裹内容高度是否超出了可视区域存在滚动情况了。

loading和finished 标识什么?

告诉van-list什么时候可以执行load方法。官方文档在这里解释过了。

操作好这两个字段的值,就能掌握好获取数据的时机,避免切换时候疯狂的执行接口的问题

页面布局:

处理loading和finished


getList(clear = false) {
      this.noMore = false
      if (clear) {
        this.list = []
      }
      this.$axios({
        method: 'get',
        params: {
          State: this.active,
          PageSize: 20,
          PageIndex: this.page,
          RedpacketBusiness: 0
        },
        url: '/api/abccc/List'
      }).then((res) => {
        if (res.PageResult.length > 0) {
          this.list.push(...res.PageResult)
          this.page = res.PageIndex
            //如果当前页是最后一页的情况下
          if (
            Math.ceil(parseInt(res.TotalRecord) / 20) == 1 ||
            this.page == Math.ceil(parseInt(res.TotalRecord) / 20)
          ) {
            this.noMore = true
            //标识van-lis加载结束,不是因为你滚动再去刷新
            this.finished = true
          }
          // 如果当前页小于总页数
          if (this.page < Math.ceil(parseInt(res.TotalRecord) / 20)) {
            //切换到下一个tab时候调完接口,确认列表有没有获取完全
            this.finished = false
          }
        } else {
          //接口返回数据为空时候就可以直接赋值为结束状态
          this.finished = true
          if (this.list.length == 0) {
            this.empty = true
            this.noMore = false
          } else {
            this.noMore = true
            this.empty = false
          }
          if (this.page == 1) {
            this.list = []
          }
        }
        this.loading = false
      })
    },

标签切换的时候还要处理什么:因为二次封装,在外部tab的active如何变化的就不赘述,内部如何监听,如何调用了getList。使用prop获取从外部传入的active值并监听。

没有达到van-list的可视区域高度,接口还是会多加载。

这是一定会执行的,那怎么破解呢?vant-list 为什么会自己去加载,第一你获取的数据渲染成元素之后的高度没有超越可视窗口。如下截取。但是这个页面本来就一条数据啊,那你就应该考虑获取数据时候传入的pagesize的大小。有没有考虑的,传20页和5页的区别呢。

  1. 5页(极端假设)的情况下,如果你的内容小于了可是窗口,第一导致load不能触发,第二侥幸可视窗口高度本来就小,能滚到底load触发了,你可能在tab0的时候成功获取了page=2的内容了,但在切换tab时候就开始不受控值乱掉接口了。 总结其原因就是首先测试不要拿5为pageSize测试,一般接口后端给要求pageSize=20或者更大。是因为产品在设置时候是会考虑到,触底加载事件的触发的。如果你的可视窗口高度远大于接口给定的20*itemHeight ,滚动不起来了,没办法加载数据了,直接跟产品和后端说明,改大pageSize数量。这是产品设计时候的错误。 那上面描述这种情况,tab切换了,又进行自动加载数据的情况前端就不要想着制止了(更全面的来说,可控但是真没必要前端增加额外参数来控制了),因为van-list 也是害怕你填不满页面,实现不了下一步滚动在帮你加载充足数据上来。pageSize过小的情况还会造成数据混乱,可能你切换后的数据是空数组push,但是通过vant-list补充之后,那表里面可能会有两条一样的。所以,调整接口pageSize最为合理。

  1. 20页的情况下是不会出现tab切换之后van-list自行调接口的问题的,哪怕是tab=1时候获取数据只有一条。因为这个时候,getList中逻辑已经执行了finished=true为结束状态了,van-list不会再刷新了。 如果tab=1,内容为21条,切换过去时候它已经获取了20条,内容高度已经大于可视窗口高度,van-list不会帮你去填充了。

总结:编写完成后测试图方便少构造数据,pageSize为5测试的,那问题多的啊。浏览网上的解决办法,都有提到内容没达到可视窗口的情况,之后自己捋了一下,哈,自己坑自己。

演示一下:vant-list 他在帮你补全内容高度的过程 ,这里调整窗口高度,帮你加载的次数是不同的。

这个是窗口比较高的时候。多调了两回,直至内容全部调完了,最终内容高度还没有达到可视窗口高度

多调了一回,窗口比较矮的时候

补充一个向下滚动onLoad不触发的情况

页面布局的要明了,你想让哪一部分滚动,在哪一个框里面滚动。例如下面的布局之中,有头部组件和内容部分content构成。css给样式时候,这两个高度就可以是固定的了。假设标题栏高度为1rem,content的高度为calc(100vh - 1rem) overflow:auto,给content之外的层级设置overflow:hidden,注意van-list 的高度会被内容撑开的。 所以还要注意的就是,如果使用了float的布局的情况,脱离了文档流,无法撑起父元素的高度情况的出现。 滚动时候注意,滚动条只会出现在content盒子的内部。

vantvan-list的用法说明
01-18
van-list里面的元素不能有float样式,否则会连续触发 load 事件 原代码 <van-list :finished
van-list的onload事件多次触发的问题
老电影故事的博客
12-04 1339
这个问题的原因是当元素设置了 overflow-x: hidden 样式时,该元素的 overflow-y 会被浏览器设置为 auto,而不是默认值 visible,导致 List 无法正确地判断滚动容器。如果一次请求载的数据条数较少,导致列表内容无法铺满当前屏幕,List 会继续触发 load 事件,直到内容铺满屏幕或数据全部载完成。如图所示,页面刷新的时候,调了3次接口(总共27条数据,我分页10条),一直莫名奇妙的。原来是这个overFlow的问题!
使用vantList组件问题,List组件嵌套自己的列表组件,用来显示一个列表,通常情况是没问题的,但是当上条件重新刷新组件的时候,会出现,重复的刷新两次,或者不刷新的问题,或者只显示一页
最新发布
qq_38389533的博客
04-02 161
使用vantList组件问题
vant-list上拉载onload事件触发多次
weixin_45121510的博客
10-14 1万+
场景:3个tab页签切换时,调用不同接口,在某一个tab只要翻页到>=2的情况,当它再点击到另一个tab的时候,另外一个tab就会连续调用两次查询接口
解决vant中上拉请求多次问题
m0_50278775的博客
03-27 6425
使用van-pull-refresh和van-list实现上拉载和下拉刷新效果
Vant使用 van-list load方法请求异常,多次请求
qq_45630675的博客
12-08 1952
Vant 使用 van-list load方法请求异常,多次请求
vant-ui框架的一个bug(解决切换后onload触发)
01-22
前几天做的项目里有用到下拉刷新。使用vant-ui里的 List 列表 瀑布流滚动载,用于控制长列表的展示 先说使用 1.用npm下载该模块包 npm i vant -S 2.引入组件 官方提供了三种方法。(我使用了第三种,全局引入...
Vant-Aliapp:支付宝小程序版本Vant组件库
02-26
Vant Aliapp是移动端Vue组件库的支付宝小程序版本,两者基于相同的视觉规范,提供一致的API接口,助力开发者快速构建小程序应用。 Vant Aliapp通过小程序转换器基于转换得到,并进行了少量的兼容适配调整。 预览 ...
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
10-15
主要介绍了vue vantUI tab切换时 list组件不触发load事件的解决办法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
vant List组件实现上拉载中 首次进行load事件执行两次的问题
zuo-yiran的博客
07-06 2112
list组件上拉载第一次载去执行load事件时,该事件执行两次的问题解决
vantList组件中load事件触发多次问题
夏夏
12-06 8045
是否设置的载数据不够占满屏幕 List中的数据不够占满屏幕则会触发load事件,产生重复载现象。可以将一次载的数据量增大来解决此问题。 父级容器是否出现overflow:scroll的属性,去掉即可。 如果在 html 和 body 标签上设置了overflow-x: hidden样式,会导致 List 一直触发载。这个问题的原因是当元素设置了overflow-x: hidden样式时,该元素的overflow-y会被浏览器设置为auto,而不是默认值visible,导致 List...
vantlist 一直请求数据,van-listload方法不断连续的调用方法请求数据,诡异现象。完整解决方案
橙-极纪元-cplvfx-JJY.Cheng
01-31 5169
vantlist 一直请求数据,van-listload方法不断连续的调用方法请求数据,诡异现象。完整解决方案
vant list列表页点击搜索删选,load方法触发多次
qq_40685103的博客
03-07 754
vant list列表页点击搜索删选,load方法触发多次
vant 框架van-list重复触发载函数的问题
热门推荐
木豪末的博客
03-07 1万+
使用van-list组件的时候,为了隐藏ios手机右侧的滚动条,我给了组件一个overflow-x:hidden属性,官方说这个属性会导致重复触发van-list载,但是我去掉这个属性仍然不管用,而且这个属性又是必须保留的,最后我又给了他一个固定的高度,就不会重复触发载了,注意一定要是固定的高度,设置height:100%仍然是不管用的,记录一下这个问题 ...
van-list会多触发onLoad事件
大把小米的博客
02-24 3483
1.List 初始化后会触发一次 load 事件,用于载第一屏的数据,这个特性可以通过immediate-check属性关闭。 2.根据有无数据来控制是否展示van-list,因为有时候页面初始化没有数据时vant-list也会触发一次 ...
vant List 列表组件分页载更多关于清空数据后多触发一次网络请求问题
weixin_45965766的博客
04-21 452
切换查询分类或搜索等场景需要先把原来的数据项清空,这时如果已不是第一页数据清空后List组件会触发触底load事件,在@load中写的网络请求就会执行,上自己主动调用的请求就多了一次,这里上this.loading = true阻止触发load事件。配置immediate-check为false可以阻止初始化时立即执行滚动位置检查触发load事件。
快速纪录:有赞 Vant van-list组件的坑之:load 事件莫名连续触发两次
iaaiNG的博客
12-11 1万+
废话不说,直接上例子 <template> <div> <van-list class="img-container" v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad" > ...
vant list载 第一次进行load事件时,莫名的进行了两次load事件
m0_68320270的博客
06-15 856
原因是:图片是由异步载过程,当图片没到onload事件时候,它没渲染出来,宽高只有0,0。vant 的触底事件判断又在此之前。就会瞬间判断没填满当前空间,就会立刻又载一次。load事件起初进行了两次,为什么呢?后来我给盒子设置了最小高度就成功了!,原来是样式的问题。
vant页面分页
zcj的博客
01-11 507
vant页面分页载。
vue3 + ts +vant 中的van-list如何实现滚动到底部载下一页数据
05-19
要实现滚动到底部载下一页数据,可以使用 `van-list` 中的 `@scroll.native` 事件来监听滚动事件,然后通过计算列表高度和滚动高度来判断是否滚动到了底部。 具体实现步骤如下: 1. 给 `van-list` 组件添 `ref` 属性,用于获取组件实例。 ```html <van-list ref="list" :finished="isFinished" :loading="isLoading" @load="onLoad"> ... </van-list> ``` 2. 在 `mounted` 钩子函数中,获取 `van-list` 组件实例,并给 `window` 对象添 `scroll` 事件监听器。 ```typescript import { defineComponent, onMounted, ref } from 'vue'; import { List } from 'vant'; export default defineComponent({ components: { VanList }, setup() { const listRef = ref(null); onMounted(() => { const listInstance = listRef.value.$el; window.addEventListener('scroll', () => { const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; const clientHeight = document.documentElement.clientHeight || document.body.clientHeight; if (scrollTop + clientHeight >= scrollHeight && listInstance.offsetHeight) { // 滚动到底部,触发载更多 } }); }); return { listRef, }; }, }); ``` 3. 在 `@load` 事件中,将 `isFinished` 和 `isLoading` 属性设置为 `true` 和 `false`,表示数据已经载完成或正在载中。 ```typescript export default defineComponent({ components: { VanList }, setup() { const listRef = ref(null); const isFinished = ref(false); const isLoading = ref(false); const onLoad = () => { if (!isFinished.value && !isLoading.value) { isLoading.value = true; // 发送网络请求,获取下一页数据 // 请求成功后,将 isLoading 设置为 false,表示载完成 } }; onMounted(() => { const listInstance = listRef.value.$el; window.addEventListener('scroll', () => { const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; const clientHeight = document.documentElement.clientHeight || document.body.clientHeight; if (scrollTop + clientHeight >= scrollHeight && listInstance.offsetHeight) { onLoad(); } }); }); return { listRef, isFinished, isLoading, onLoad, }; }, }); ``` 这样,当滚动到底部时,就会触发 `onLoad` 方法,从而载下一页数据。需要注意的是,在数据全部载完成后,需要将 `isFinished` 设置为 `true`,以防止重复载数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • ant design vue 年份选择器 5693
  • ant design vue 使用upload自定义方法实现图片文件上传 5637
  • ant design vue table单元格编辑,点击全部显示可编辑单元 5427
  • uni-app支付相关配置和代码(H5+APP+小程序+requestPayment service fail not found报错) 5054
  • Ant design vue table 合并写法(详细代码-行合并) 4126

分类专栏

  • js 14篇
  • Vue 46篇
  • uniapp 12篇
  • node 4篇
  • hbuilder 2篇
  • Promise 1篇
  • 异步问题 2篇
  • npm 2篇
  • HTML 11篇
  • css 3篇
  • git 2篇
  • SpringBoot 1篇
  • yarn 3篇
  • webpack 1篇
  • Echarts 1篇
  • 求解答 1篇
  • react 2篇

最新评论

  • uni-app支付相关配置和代码(H5+APP+小程序+requestPayment service fail not found报错)

    Marry1.0: [system] API `requestPayment` is not yet implemented报这个错是咋回事啊哥

  • ant design vue 年份选择器

    qq_41856165: 点其他地方选择器不隐藏怎么弄呢

  • Ant design vue table 合并写法(详细代码-行合并)

    小胖砸~: 亲看后面全代码,obj展示结构告诉主要处理的rowSpan在哪个位置。完整代码中这一段是在一个循环体里面,forEach中的index

  • uniapp中解析富文本

    小胖砸~: <rich-text> 的nodes结构中是有class属性的。 v-html 你可以查看元素,就是类似append 插入内容在指定位置。你插入的可能是<p class="p"></p> 这个样子,类p可以添加样式其中包含文字颜色。没有颜色你看看是不是作用域的问题,也就是你定义的css是不是奏效,直接控制台查看元素。

  • uniapp中解析富文本

    知 秋~: 这个标签不支持富文本带颜色吧

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • uniapp开发微信小程序 ,使用本地图片做背景图应该怎么处理
  • uniapp 自定义标题情况下,让标题和右侧胶囊对齐
  • vue里面实现字母搜索栏,左侧浏览到那个首字母处,右侧首字母高亮
2023年3篇
2022年20篇
2021年57篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司马鞍山优化报价宁德百姓网标王永湖网站优化按天扣费公司木棉湾关键词按天扣费报价曲靖建网站襄樊企业网站设计推荐舟山SEO按天计费中卫百度网站优化价格酒泉网站推广工具思茅企业网站改版十堰百姓网标王推荐乐山百度爱采购多少钱百色网页制作哪家好崇左网络营销价格朝阳seo网站优化公司鄂州模板推广推荐松原关键词排名包年推广陇南建站价格凉山设计网站价格黄山网络广告推广推荐黑河网站改版报价保山百姓网标王哪家好坪地网站定制多少钱周口营销网站推荐宜春建站多少钱成都网站定制多少钱爱联seo网站优化哪家好淮安网站推广方案宿迁SEO按天计费推荐三亚营销型网站建设哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化