当前位置: 代码网 > it编程>前端脚本>Vue.js > Vant中List组件immediate-check=false无效的解决

Vant中List组件immediate-check=false无效的解决

2024年05月19日 Vue.js 我要评论
vant中list组件immediate-check=false无效使用vant中的list组件时,会有这样的场景初始化时想自己触发列表查询,而不想触发 list 组件自带的 load 方法,这时可以

vant中list组件immediate-check=false无效

使用vant中的list组件时,会有这样的场景

初始化时想自己触发列表查询,而不想触发 list 组件自带的 load 方法,这时可以设置 immediate-check=false,如下代码,但是这种方式会在下面的场景中出现问题

 <van-list
     ref="vanlist"
     v-model="loading"
     :finished="finished"
     finished-text="已显示全部周报"
     :error.sync="error"
     error-text="请求失败,点击重新加载"
     :immediate-check="false"
     @load="getworklist()"
 >
 data () {
    return {
      loading: false,
      error: false,
      finished: false
    };
  },
  created () {
    this.getworklist();
  },
  methods:{
      async getworklist () {
	     // 调接口查询
	     ....
	     // 加载状态结束
	     this.loading = false;
    }, 
  }

问题场景

  • 前提:a页面跳转到b页面,b为列表页,a页面内容超过一屏
  • 正常:上述代码,正常情况下,a跳转到b时,只执行 created 中的 getworklist 方法,不触发 list 组件中的 getworklist
  • 异常:但是由于a中内容超过一屏,页面滚动到底部后,再点击跳转到b时,就会将 created 和 list 组件的 getworklist 都执行一次,导致列表数据重复展示

解决方法

解决方法十分简单

 data () {
    return {
      loading: false 修改为=> loading: true
    };
  },

immediate-check无效的原因分析

vant官网中给出的load触发条件很明确,也就是offset决定了触发与否

下面两张图是list组件源码,可以看出,immediate-check无法阻止滚动条的监听事件,滚动条与底部距离小于offset 时,load事件该触发还是会触发。

因此,immediate-check属性准确的说明应该是:

是否在初始化时立即执行滚动位置检查(滚动条与底部距离小于offset 时设置无效

vant list组件使用的坑

1.解决请求两次数据重复

把finish的初始值设置为true,然后添加 immediate-check=true

2.如何判断finish为true的情况

一般看网络请求返回的是code是否为错误码

3.每次切换tabs栏目必须让变量finish的值更新为false这样才会在上拉的时候重新去发送ajax请求去加载数据。

总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com