热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅谈Vantlist 上拉加载及下拉刷新的问题

这篇文章主要介绍了浅谈Vant-list 上拉加载及下拉刷新的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完

Vant-list 上拉加载及下拉刷新

第一步引入

import { Notify, Dialog, Image, List, PullRefresh } from "vant"
import Vue from "vue"
Vue.use(Image).use(List).use(PullRefresh)

第二步


      
          
       
    

第三步

 data () {
    return {
      productList: [], //异步查询数据
      loading: false, //自定义底部加载中提示
      finished: false,//自定义加载完成后的提示文案
      refreshing: false,//清空列表数据
      pageNo: 0 //当前页码
    }
  }

第四步

  methods: {
    onLoad () {
      this.pageNo++
      setTimeout(() => {
        if (this.refreshing) {
          this.productList = []
          this.refreshing = false
        }
        this.loading = false
        const shopId = this.$store.state.user.shopId
        //这里是ajax请求  根据自己业务需求
        pageList({ shopId: shopId, pageNo: this.pageNo, pageSize: 2 }).then(res => {
          if (this.validResp(res)) {
            this.total = res.data.pageNo
            this.loading = true
            this.productList.push(...res.data.dataList)
          }
          if (this.productList.length >= parseInt(res.data.pageNo)) {
            this.finished = true
          }
        })
      }, 1000)
    },
    onRefresh () {
      this.finished = false
      this.loading = true
      this.pageNo = 0
      this.onLoad()
    }
    }

vant下拉刷新与上拉加载一起使用问题

下拉刷新触发两次 list与pull

//下拉刷新
 onRefresh() {
                this.list = [];
                this.curPage = 1;
                this.finished = true;
                this.getData();
  },
getData() {
                this.isLoading = false;
                getList({
                    curPage: this.curPage,
                    pageSize: this.pageSize
                }).then((res) => {
 
                    this.listLoading = false;
 
                    if (res.code == 200) {
                        this.list = this.list.concat(res.data.list);
                        this.curPage = res.data.nextPage;
                        if (this.list.length >= res.data.total) {
                            this.finished = true;
                        }else {
                            this.finished = false;
                        }
                    }
                })
            },

原因是在于下拉刷新的时候触发了上拉加载,所以执行了两次

解决方法是

先将list组价的finished=true,数据加载完了在判断该值应该是true还是false,这样可以避免在下拉刷新的时候触发上拉加载。

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


推荐阅读
author-avatar
司徒琪瑶_186
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有