首页前端开发VUEvant-List-@load事件一直触发的解决

vant-List-@load事件一直触发的解决

时间2024-02-11 05:11:03发布访客分类VUE浏览1031
导读:收集整理的这篇文章主要介绍了vant-List-@load事件一直触发的解决,觉得挺不错的,现在分享给大家,也给大家做个参考。 目录vant-List-@load事件一直触发项目场景问题...
收集整理的这篇文章主要介绍了vant-List-@load事件一直触发的解决,觉得挺不错的,现在分享给大家,也给大家做个参考。
目录
  • vant-List-@load事件一直触发
    • 项目场景
    • 问题描述
    • 原因分析
    • 解决方案
  • vant-list onLoad触发以及tab切换不再触发问题
    • 总结

      vant-List-@load事件一直触发

      项目场景

      今天项目用到vant-List,发现一直触发@load事件。

      这是请求的page和pageSize

      page: 0,pageSize: 10,

      后端测试数据一共21条,但是进入页面就一下请求了三次,全部加载完数据了,这样就达不到要求了。

      问题描述

      查看了文档底下的常见问题:

      为什么会连续触发 load 事件?

      如果一次请求加载的数据条数较少,导致列表内容无法铺满当前屏幕,List 会继续触发 load 事件,直到内容铺满屏幕或数据全部加载完成。因此你需要调整每次获取的数据条数,理想情况下每次请求获取的数据条数应能够填满一屏高度。

      看到这个时候我查看了一下代码,10条的数据量是能够填满一屏的,但是还是直接请求完成了。

      往下走:

      在 htML、body 上设置 overflow 后一直触发加载?

      如果在 html 和 body 标签上设置了overflow-x: hidden样式,会导致 List 一直触发加载。

      html,body {
          overflow-x: hidden;
      }
          

      这个问题的原因是当元素设置了overflow-x: hidden样式时,该元素的overflow-y会被浏览器设置为auto,而不是默认值visible,导致 List 无法正确地判断滚动容器。

      解决方法是去除该样式,或者在 html 和 body 标签上添加height: 100%样式。

      原因分析

      到这里就找到问题的原因了,我习惯在外层盒子加上min-height: 100vh; overflow-x:hidden; 没想到会影响这个组件,麻了。

      解决方案

      去除overflow-x: hidden; 或将min-height: 100vh; 改为height: 100vh;

      vant-list onLoad触发以及tab切换不再触发问题

      首先 van-list 是首次进就会触发加载的,滚动条滑倒底部不会再触发 一般是因为外部高度未固定导致拿不到滚动条位置

      template>
              div class="listClass" ref="listout">
                  van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
                      div v-for="(ITem, index) in list" :key="index">
      {
      {
      item}
      }
          /div>
                  /van-list>
              /div>
          /template>
          script>
      export default {
          data() {
              return {
                  // 初始化定义            loading: true,            finished: false,            seArchData: {
                      pageSize: 10,                pageNo: 0            }
      ,            list: []        }
          }
      ,    methods: {
              onLoad(){
                  this.searchData.pageNo += 1            this.oBTainList()        }
      ,        // 列表        obtainList () {
                      // 调用列表接口(此为演示)            findList(this.searchData).then(res =>
       {
                          if (res.data.data &
          &
       res.data.errcode == 0) {
                          if(this.searchData.pageNo == 1){
                              this.list = []                    }
                              res.data.data.result.foreach((v) =>
       {
                              this.list.push(v)                    }
          )                    this.loading = false                    if(this.searchData.pageNo >
      = res.data.data.totalPage) {
                              this.finished = true                    }
                      }
                  }
      )        }
          }
      }
          /script>
          style scoPEd>
      .listClass {
              width: 100%;
              height: 100vh;
              overflow-y: auto;
      }
          /style>
          

      tab 切换的时候 需要重置下loading和finished状态

          // 切换    activeClick (type) {
            this.searchData.active = type      this.searchData.pageNo = 0      this.$refs.listout.scrollTop = 0      this.loading = true      this.finished = false      this.onLoad()    }
          

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

      您可能感兴趣的文章:
      • vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
      • vant-ui框架的一个bug(解决切换后onload不触发)
      • vant中list的使用以及首次加载触发两次解决问题

      声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


      若转载请注明出处: vant-List-@load事件一直触发的解决
      本文地址: https://pptw.com/jishu/609362.html
      Vue3 重构函数透传示例解析 Vant中List组件immediate-check=false无效的解决

      游客 回复需填写必要信息